根据糖果数显示正确的行

时间:2017-05-12 06:46:54

标签: sql sql-server tsql

目标:
如果一个人有两个糖果编号,则应始终首先显示编号1。无需显示2号糖果。
如果一个人没有数字1,则应该显示数字2。

Display all data
(int)(int)  (nvarchar) (int)
Id  fId     Name     Candy Number
---------------------------------
1    12     Kimn                1
2    12     Kimn                2
3    19     Lisa                1
4    15     John                2
5    16     Maria               2
6    16     Maria               1
7    17     Mao                 2



Requested result:
Id  fId     Name     Candy Number
---------------------------------
1    12     Kimn                1
3    19     Lisa                1
4    15     John                2
6    16     Maria               1
7    17     Mao                 2

问题:
显示它对我来说效果不佳。 尝试使用case并结束where语句,但代码不符合目的。

有什么想法吗?

select *
from
    table
where
    candynumber = 
        CASE WHEN b.MatchType = 1 
                THEN 1
            ELSE 2
        END

谢谢!

1 个答案:

答案 0 :(得分:0)

这可以使用row_number()窗口函数:

select Id, fId, Name, Candy_Number from (
    select your_table.*, row_number() over(partition by fId order by Candy_Number) as rn from your_table
) t 
where rn = 1
order by id

这为每fId行提供了一行,而Candy_Number更低。