SQL Server - 如果重复,则将整行更新为null

时间:2015-06-26 04:25:15

标签: sql-server

我在SQL Server 2008中有这个表

+----------+----------+----------+
|    ID    |   Date   |   Desc   |
+----------+----------+----------+
|   I.001  |01/01/2014|   Test   |
|   I.001  |01/01/2014|   Test2  |
|   I.002  |02/01/2014|   Test3  |
|   I.002  |02/01/2014|   Test4  |
|   I.002  |02/01/2014|   Test5  |
+----------+----------+--------- +

并且表格继续进行类似的模式。我期待像这样的结果

+----------+----------+----------+
|    ID    |   Date   |   Desc   |
+----------+----------+----------+
|   I.001  |01/01/2014|   Test   |
|   I.001  |   NULL   |   NULL   |
|   I.002  |02/01/2014|   Test3  |
|   I.002  |   NULL   |   NULL   |
|   I.002  |   NULL   |   NULL   |
+----------+----------+--------- +

是否有任何SQL脚本允许我获得上述结果?非常感谢提前。

1 个答案:

答案 0 :(得分:4)

此处重复表示具有相同的IDDate。要保留的行将是按字母顺序排在第一个DESC的行。

WITH Cte AS(
    SELECT *,
        RN = ROW_NUMBER() OVER(PARTITION BY ID, [Date] ORDER BY [Desc])
    FROM YourTable
)
UPDATE Cte
    SET [Date] = NULL,
        [Desc] = NULL
WHERE RN > 1