我尝试进行查询以调用所有匹配col3 = 1
并获取组col4 = 123
的其余部分,同时将col2作为不同的值。我的表看起来像
ID col1 col2 col3 col4
---------------------------------
1 A1 A NULL 123
2 B1 B NULL 123
3 C1 C NULL 123
4 D1 D NULL 123
5 C2 C 1 123
6 D2 D 1 123
并且我正在尝试进行返回ID 1,2,5和6的查询。尝试过联合并加入select * from tbl where col4 = 123 and col3 =1
的变体并且它们都排除3,4,5,6或包括商场。
答案 0 :(得分:2)
select *
from (select *
,row_number () over
(
partition by col2
order by case when col3 = 1 then 1 else 2 end
) as rn
from t
where col4 = 123
) t
where col3 = 1
or t.rn = 1
;
答案 1 :(得分:0)
如果我理解正确,您希望col3
不是NULL
的所有行,然后是其余行,那些具有不同col2
值的行:
select t.*
from t
where t.col4 = 123 and
(t.col3 is not null or
t.col2 not in (select t.col2 from t t2 where t2.col4 = 123 and t2.col3 is not null)
)