2016-04-21 66 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)