2014-09-11 133 views
1

我有一個要求寫一個SQL Server查詢從一個表中讀取,讓我們假設表名爲表1,結構和行是這樣的:SQL查詢到兩行合併爲一個作爲結果

enter image description here

關鍵是如果列RefID有值,例如,第2行的RefID值爲3,它引用另一行的ID(第3行),並且第3行還必須具有非空RefID且值必須成爲第一個的ID。這個想法是這兩個屬於同一個對象,所以我想把它們作爲一個結果行。

我知道我可以做內部連接在同一個表是這樣的:

select T1.*, T2.* from Table1 T1 inner join Table1 T2 on T1.RefID = T2.ID 
where T1.ID is not null 

但事實是,結果有冗餘:結果將有4行,正如我提到的,由於行2和行3一起代表一個對象,我只想得到2行:一行2行3,另一行4行5.我該怎麼做?

+1

如何在一行中選擇兩行2和3?你想使用什麼樣的聚合函數?請爲您發佈的樣本數據的兩行粘貼所需的數據,這將解釋您想獲得什麼。 – 2014-09-11 07:24:47

回答

1

只要確保自己的ID被連續下令:

select T1.*, T2.* from Table1 T1 inner join Table1 T2 on T1.RefID = T2.ID AND T1.ID < T2.ID 
where T1.ID is not null 
+0

謝謝你的回答。這對我的SQL Server測試起作用。但我沒有提到這是一個Access數據庫,顯然它的語法有點不同。相同的查詢不起作用,它只是彈出一個窗口要求我輸入參數T1(某些鏈接說,Access不允許別名列,但我使用別名,我必須因爲我加入同一張表,在表)。你碰巧知道Access上的正確查詢嗎? – tete 2014-09-11 07:48:40

1

如果記錄是多餘的ID列是唯一我是完全以你不@bulat aggree需要where子句他們已經淘汰。我這個查詢將適用於你。

select * from Table1 a inner join Table1 b ON a.ID=b.RefID and a.ID>b.ID