仅显示一次列值

时间:2015-07-23 16:45:10

标签: sql sql-server

假设我有下表。如何根据列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

3 个答案:

答案 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进行分类的困境,因为当以不同方式对数据进行分类时,它们可以扮演陌生人的事情。