如何编写下面的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
答
与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
答
一种方法,这是聚集。下面获取符合您的条件,该列的值:
select col1
from t
where col2 in (1, 2)
group by col1
having min(col3) <> max(col3);
如果你想要得到的原始行,有很多种方法。除了明显的人(如in
,exists
和join
),你可以使用窗口功能:
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;
那你试试? – Slavik
我得到了如何获得第一和第二列,但与第三列混淆。这里是什么1尝试col1和col2从your_table col1选择col1 哪里col2在(1,2) group by col1 有count(distinct col2)> 1 – jabbars
当你尝试了你的尝试,什么不能使用它?你得到了什么结果? – halfer