2016-10-03 48 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。 。 。代码起作用。它会产生你指定的输出。 –