假设我有下表。如何根据列789@123.co.uk
仅显示“金额”一次?
ID
鉴于ff示例,预期输出应如下所示:
ID Amount
1 10.00
1 10.00
1 10.00
2 10.00
2 10.00
2 10.00
我尝试使用 ID Amount
1 10.00
1 0.00
1 0.00
2 10.00
2 0.00
2 0.00
,但这还不够,它给了我这个结果。
ROW_NUMBER
编辑: 这是我到目前为止所尝试的:
ID Amount
1 10.00
1 0.00
1 0.00
2 0.00
2 0.00
2 0.00
答案 0 :(得分:5)
只需将分区更改为使用ID:
SELECT ID
,CASE WHEN ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) = 1
THEN Amount
ELSE 0.00
END [AMOUNT]
FROM TABLE
Order by ID, Amount Desc
答案 1 :(得分:0)
这应该这样做:
select id, iif(id=lag(id,1,0), 0, amount) from mytable order by id
基本上,如果当前id与id返回一行相同,则使用0.否则,使用amount列。
我假设,根据您提供的数据,“金额”对于任何单个ID都保持不变。
答案 2 :(得分:0)
对于那些“讨厌” OVER和PARTITION的用户,最好学习一下,您可以使用LEFT JOIN表的ID来确定是否显示数据。
因此,以OP的示例为例,假设ID
来自TableA
,而Amount
来自TableB
,两者都使用各自唯一的{{1} }。
TableA
ID
TableB
ID INT Primary Key
ColA some column
ColB some column
然后此SELECT也应该起作用:
ID INT Primary Key
Amount FLOAT
ColA some column
etc
它肯定避免了使用OVERS进行分类的困境,因为当以不同方式对数据进行分类时,它们可以扮演陌生人的事情。