2016-04-21 75 views
1

這裏是我的表架構SQL合併在SQL表匹配的行

Table1 
{ 
Column1 nVarchar(Max), 
Column2 nVarchar(Max) 
} 

這裏是我的樣本數據

Column1   Column2 

Tom    Blue 
Tom     
Gary    Green 
Gary    Yellow 
Sam     
Sam    Red 

我想更新將Column如果COLUMN1值duplcated和任何一個第2列中的行是空的,空單元將被非空單元替換。

例如i。從上述採樣數據所需的輸出的將是

Column1   Column2 

    Tom    Blue 
    Tom    Blue 
    Gary    Green 
    Gary    Yellow 
    Sam    Red 
    Sam    Red 
+1

如果你有三排一個'NULL'和其它兩個不同的值應發生什麼情況? –

+1

當你說「空」你的意思是零或零長度的字符串或者是? –

+0

我的意思是空字符串'' – Peekay

回答

0

的下面將與最大值更新,忽略空值或空字符串。

如果只有一種不同的可能性,那當然會被選中。

;WITH T AS 
(
SELECT *, 
     MAX(NULLIF(Column2,'')) OVER (PARTITION BY Column1) AS C2 
FROM YourTable 
) 
UPDATE T 
SET Column2 = C2 
WHERE Column2 IS NULL OR Column2 = ''; 
+0

考慮如果值不爲空,但空字符串'''' –

+1

@JeffPuckettII問題不明確,那麼更新以將空值或零長度字符串視爲「空「 –

1

試試這個:

UPDATE Table1 
SET Column2 = 
    (SELECT t1.Column2 FROM Table1 t1 
    WHERE t1.Column1 = Table1.Column1 
    AND t1.Column2 IS NOT NULL) 
WHERE Column2 IS NULL 
AND EXISTS (
    SELECT 'OTHER' 
    FROM Table1 t1 
    WHERE t1.Column1 = Table1.Column1 
    and t1.Column2 IS NOT NULL)