任何人都可以告诉我如何为列C1中的每个不同值选择C3列中具有最小值的记录,但如果C3中的值相同,则列c2中值为“x”的记录应该被选中。例如,对于下面插入的值,我想看第一行和第三行。非常感谢。
CREATE TABLE Test.tst (
C1 nvarchar(3) NOT Null,
C2 nvarchar(3) NOT Null,
C3 int not null)
Insert into test.tst
select 'A', 'x', 2 union
select 'A', 'y', 2 union
select 'B', 'x', 1 union
select 'B', 'y', 2
答案 0 :(得分:3)
您的问题的一般答案是row_number()
使用聪明的order by
:
select c1, c2, c3
from (select t.*,
row_number() over (partition by c1
order by c3 asc, (case when c2 = 'x' then 1 else 0 end) desc
) as seqnum
from tst t
) t
where seqnum = 1;
编辑:
Here是一个有效的SQL小提琴。
答案 1 :(得分:0)