我尝试将col1和col2相同的行(此处为最后两行)与以下条件合并
-Priority row - row where' ManualUpdate'专栏是“是”'
Ex:Row4(Col3)<> Row5(Col3),然后是Row5(Col3)
我尝试使用' JOIN' 并使用 CASE声明。但没有运气:(
建议表示赞赏。
答案 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