既然你要组由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
的情况下,
这应该比子选择或连接快许多。尼斯。 – 2011-05-26 17:41:13
如果column2可以包含NULL,那么如果您有两行,一个是NULL,另一个是值,则不起作用。 – eaolson 2011-05-27 00:59:03
@eaolson感谢您指出。我已经提出了一个新的查询 – 2011-05-27 06:07:50