目标:
如果一个人有两个糖果编号,则应始终首先显示编号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
谢谢!
答案 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更低。