将两行相同的表与公共字段合并

时间:2015-03-12 11:56:29

标签: sql sql-server tsql

我尝试将col1和col2相同的行(此处为最后两行)与以下条件合并

-Priority row - row where' ManualUpdate'专栏是“是”'

Ex:Row4(Col3)<> Row5(Col3),然后是Row5(Col3)

我尝试使用' JOIN' 并使用 CASE声明。但没有运气:(

建议表示赞赏。

enter image description here

3 个答案:

答案 0 :(得分:0)

使用手动更新= YES返回所有行。 还使用手动更新= YES返回不具有相同c1 / c2的行。

select col1, col2, col3, col4, col5, col6
from tablename t1
where "Manual update" = 'YES'
   or NOT EXISTS (select 1 from tablename t2
                  where t1.col1 = t2.col1 and t1.col2 = t2.col2
                    and t2."Manual update" = 'YES')

答案 1 :(得分:0)

这很棘手。您希望逐列优先,值有时来自手动更新列,有时来自另一列。

这是首先查找手动更新值的一种方法。如果它不存在,它将采取任何值:

select t.col1, t.col2,
       coalesce(max(case when [Manual Update]= 'Yes' then col3 end), max(col3) ) as col3,
       coalesce(max(case when [Manual Update]= 'Yes' then col4 end), max(col4) ) as col4,
       coalesce(max(case when [Manual Update]= 'Yes' then col5 end), max(col5) ) as col5,
       coalesce(max(case when [Manual Update]= 'Yes' then col6 end), max(col6) ) as col6,
       (case when min([Manual Update]) = max([Manual Update]) then min([Manual Update]) end) as [Manual Update]
from table t
group by t.col1, t.col2;

答案 2 :(得分:0)

这可以使用COALESCE运算符完成。

select A.Col1, 
A.Col2, 
coalesce(B.Col3, A.Col3),
coalesce(B.Col4, A.Col4)
coalesce(B.Col5, A.Col5)
coalesce(B.Col6, A.Col6)
from Tbl A left join Tbl B 
on A.Col1 = B.Col1 and A.Col2 = B.Col2 
and A.[Manual Update] = 'No' and B.[Manual Update] = 'Yes' 

基本上,您必须执行self join,其中一边是Manual Update列设置为no而另一边设置为是的行。 Coalesce函数的作用方式是首选Manual Update设置为yes

的值