2015-10-15 2 views
0

можно заменить значение строки пустой строкой, если найденное дублирующее значение найдено?Заменить значение строки пустой строкой, если дубликат

Например

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.

ответ

1

Часто этот тип трансформации лучше делать на уровне приложений, так как результат -set не является «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; 
1

ROW_NUMBER Использование и CASE:

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 
0
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