【问题标题】:Replace row value with empty string if duplicate如果重复,用空字符串替换行值
【发布时间】:2016-01-13 07:53:09
【问题描述】:

如果发现重复值,是否可以用空字符串替换行值?

例如

SELECT ProductCode, Color FROM Product

--------------------
ProductCode | Color
--------------------
   00A0B    |  Red
   00A0B    |  Blue
   00A0C    |  Red
   00A0C    |  Black
   00A0C    |  White
--------------------

--------------------
ProductCode | Color
--------------------
   00A0B    |  Red
            |  Blue
   00A0C    |  Red
            |  Black
            |  White
--------------------

我使用的是 SQL Server 2012。

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    通常,这种类型的转换最好在应用层完成,因为结果集不是“SQL-ish”。也就是说,排序对于理解行很重要。

    但是,您可以这样做:

    select (case when row_number() over (partition by ProductCode order by (select NULL)) = 1
                 then ProductCode
            end) as ProductCode
           Color
    from Product
    order by ProductCode;
    

    【讨论】:

    • row_number()sql默认函数还是自己编出来的?
    • @Karen。 . .我不知道你的评论是什么意思。 ROW_NUMBER() 是 ANSI SQL 的一部分,并且已经存在了二十年。
    【解决方案2】:

    使用ROW_NUMBERCASE

    WITH Cte AS(
        SELECT *,
            Rn = ROW_NUMBER() OVER(PARTITION BY ProductCode ORDER BY (SELECT NULL))
        FROM Product
    )
    SELECT
        ProductCode = CASE WHEN Rn = 1 THEN c.ProductCode ELSE '' END,
        Color 
    FROM Cte c
    ORDER BY c.ProductCode
    

    【讨论】:

      【解决方案3】:
      ROW_NUMBER() helps to find duplicate record : 
      
       SELECT Productcode=( CASE
                                 WHEN rn > 1 THEN ''
                                 ELSE Productcode
                               END ),
                 color
          FROM   (SELECT Row_number()
                           OVER (
                             partition BY productcode
                             ORDER BY productcode) AS rn,
                         *
                  FROM   table)a 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-09
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多