如何使用具有特定字段组合的SQL在单个列中保留单值

时间:2017-07-19 20:53:51

标签: sql sql-server

给出下表中的客户,类别,产品,日期和价值,

Customer | Category | Product | Date | Value | Single value
------------------------------------------------------------
Cust A   | Categ A  | SKU A   |010101|  100  |    100
------------------------------------------------------------
Cust A   | Categ A  | SKU B   |010101|  100  |   
------------------------------------------------------------
Cust A   | Categ B  | SKU C   |010101|  99   |    99
------------------------------------------------------------
Cust A   | Categ B  | SKU D   |010101|  99   |   

如何填写“单值”列,只保留某个键组合的一个值(如客户,类别,日期)?

先谢谢

2 个答案:

答案 0 :(得分:0)

走出困境...这是使用CTE的一种方式,你可以修改它来做你想做的事。这会将[Single value]列设置为您所描述的配对的MAX()值,如partition by语句中所示。

;WITH CTE AS
(   SELECT  Customer, 
            Category, 
            Date,
            [Single value],
            MAX([Single value]) over(partition by Customer, Category, Date) as NewVal
    FROM    SomeTable
)

UPDATE  CTE
SET     [Single value] = NewVal

答案 1 :(得分:0)

试试这个:

    update t set t.[Single value]=t.[Value] from 
    (
       select *,row_number()over(partition by Customer,Category, Date order by getdate()) as rn from #t
    ) as t where t.rn=1