如何编写下面的SQL查询?

如何编写下面的SQL查询?

问题描述:

考虑下面的3列。我需要得到具有COL2值相同COL1的列1,2和COL3有COL2 2个不同的值,其中COL1都是一样的COL2和COL3如何编写下面的SQL查询?

Col1 Col2 Col3 
A   1 IND 
A   2 IND 
A   3 IND 
B   1 IND 
B   2 PAK 
B   3 IND 
B   4 IND 
C   1 IND 
C   2 IND 
C   3 PAK 
C   4 PAK 
D   1 IND 
D   2 PAK 
E   1 PAK 
E   2 SA 

结果将在下面

Col1 Col2 Col3 
B   1 IND 
B   2 PAK 
D   1 IND 
D   2 PAK 
E   1 PAK 
E   2 SA 
来给出

这里是我试过col1和COL2:

select col1 from your_table 
where col2 in (1,2) 
group by col1 
having count(distinct col2) > 1 
+2

那你试试? – Slavik

+0

我得到了如何获得第一和第二列,但与第三列混淆。这里是什么1尝试col1和col2从your_table col1选择col1 哪里col2在(1,2) group by col1 有count(distinct col2)> 1 – jabbars

+0

当你尝试了你的尝试,什么不能使用它?你得到了什么结果? – halfer

与col2的3和4的行可以忽略不计,按您的请求,从而

在col1 10
  • 自联接在
  • 筛选到COL2(1,2)
  • COL3是不同

喜欢这张

SELECT 
    * 
FROM 
    MyTable M1 
    JOIN 
    MyTable M2 ON M1.COl1 = M2.COl1 
WHERE 
    M1.Col2 IN (1, 2) 
    AND 
    M2.Col2 IN (1, 2) 
    AND 
    M2.Col3 <> M1.COl3 
+0

非常感谢你......这个作品很棒! @gbn – jabbars

+2

@ShihajJabbar请将此答案标记为已接受tn使用左边的大勾号 – gbn

+0

@gbn,根据Microsoft准则,超过五张表不允许在SQL Server中加入。这是对的吗?如果不正确,按照您的观点,允许在SQL Server中允许加入多少表以获得更好的性能。 – RGS

一种方法,这是聚集。下面获取符合您的条件,该列的值:

select col1 
from t 
where col2 in (1, 2) 
group by col1 
having min(col3) <> max(col3); 

如果你想要得到的原始行,有很多种方法。除了明显的人(如inexistsjoin),你可以使用窗口功能:

select col1, col2, col3 
from (select t.*, 
      min(col3) over (partition by col1) as mincol3, 
      max(col3) over (partition by col1) as maxcol3 
     from t 
     where col2 in (1, 2) 
    ) t 
where mincol3 <> maxcol3; 
+0

谢谢......但我没有得到预期的结果! – jabbars

+1

嗨@Halfer对不起..我没有收到结果,因为我收到了我期望从上面的评论.....谢谢你的帮助。 – jabbars