假设以下是我的表: -
COL1 | COl2 | COL3
-----|----- |-----
1 | 2 | 3
1 | 2 | 3
1 | 4 | 3
我希望每列中的记录在所有行中都有一个值。
对于上面的示例数据,我想要:
1,NULL,3
结果。
答案 0 :(得分:2)
你可以通过做一个不同的计数来做到这一点:
select
case when count(distinct col1) = 1 then min(col1) end as col1,
case when count(distinct col2) = 1 then min(col2) end as col2,
case when count(distinct col3) = 1 then min(col3) end as col3
from tbl
答案 1 :(得分:2)
select case when count(distinct col1) = 1 then max(col1) else null end,
case when count(distinct col2) = 1 then max(col2) else null end,
case when count(distinct col3) = 1 then max(col3) else null end
from table;
答案 2 :(得分:2)
您可以使用聚合和case
。对于您的数据:
select (case when min(col1) = max(col1) then min(col1) end) as col1,
(case when min(col2) = max(col2) then min(col2) end) as col2,
(case when min(col3) = max(col3) then min(col3) end) as col3
from t;
我强烈建议您使用min()
和max()
代替count(distinct)
。后者往往表现不佳。