情景1:
表:
id column1 column2
1 "bla" "foo"
2 "bla" "bar"
我希望按column1
进行分组,并为column2
获取null,因为所有行中的值都不相同。
情景2:
表:
id column1 column2
1 "bla" "foo"
2 "bla" "foo"
我希望按column1
进行分组,并foo
获取column2
,因为column2
的所有值都相等。
是否可以通过sql语句解决这个问题?
答案 0 :(得分:2)
由于您希望按column1
进行分组,因此了解column2
是否具有所有相同值的一种方法是检查max(column2) = min(column2)
是否正确,因此这应该有效:
select column1, case
when max(column2) = min(column2) then max(column2)
else null
end as col2
from tabletest
group by column1;
修改强>
如果您的column2
无法接受null
值,那么上述查询就可以了,否则您需要以下一个来处理column2
为null
时的情况:
select t.column1, case
when (select max(1) from tabletest where column2 is null and column1 = t.column1) = 1 then null
when max(t.column2) = min(t.column2) then max(t.column2)
else null
end as col2
from tabletest t
group by t.column1;
唯一的区别是我们需要添加case
条件来涵盖何时column2 is null
答案 1 :(得分:0)
试试这个:
select id = t.id ,
col1 = t.col1 ,
col2 = case when t1.N < 2 then t.col2 end
from myTable t
join ( select col1,N=count(distinct col2)
from myTable
group by col1
) t1 on t1.col1 = t.col1