2016-10-03 30 views
0

下面的值獲取交叉配列是該方案,SQL:與兩個字段

表A

--------------------- 
ID | Col 1  | Col 2 
--------------------- 
1  | 1   | 2  
--------------------- 
2  | 3   | 4   
--------------------- 
3  | 2   | 1    
--------------------- 
4  | 4   | 3   
--------------------- 

在這裏,在第1欄有一些數據「1」和在第2欄第有一些數據'2'。在同一個表中,有另一行將這些值互換。我怎樣才能得到輸出如下使用SQL查詢

ID_1 | Col 1  | Col 2  |ID_2 
----------------------------------- 
1 | 1   | 2   |3 
----------------------------------- 
2 | 3   | 4   |4 
----------------------------------- 

我知道這個選項

SELECT a.ID, a.col1, a.col2 
    FROM tableA a 
WHERE NOT EXISTS(SELECT 1 
        FROM tableA b 
        WHERE a.col1 = b.col2 
         AND a.col2 = b.col1 
         AND a.col1 > b.col1); 

,但我不知道,如何讓第二ID

回答

1

這是這算什麼你要?

select a.*, b.id 
from tableA a join 
    tableB b 
    on a.col1 = b.col2 and a.col2 = b.col1 and a.id < b.id; 

這將每額外id更大返回一行大於給定id其中在col1col2值是顛倒的。

這裏是代碼,以證明這個工程:

with tablea(id, col1, col2) as (
     values(1, 1, 2), (2, 3, 4), (3, 2, 1), (4, 4, 3) 
    ) 
select a.*, b.id 
from tableA a join 
    tableA b 
    on a.col1 = b.col2 and a.col2 = b.col1 and a.id < b.id; 

這正好返回您指定的內容。 Here是一個SQL小提琴。

+0

不,先生,我不想每個額外的'id'返回一行大於'col1'和'col2'中的值顛倒的給定ID。它會給出下面提到的結果ID | COL_1 | COL_2 | ID_1 1 | 1 | 2 | 2 3 | 3 | 4 | 4 –

+0

@ShubhajitChanda。 。 。代碼起作用。它會產生你指定的輸出。 –