我有一个查询:
select * from dwtrat_edu_tempdb.test1
返回
tile_to_update elementary_school high_school university
2270210 583 null null
2270210 321 10529 null
2270210 null null 58151
我想合并行并从每一列中取一个值(无论哪个,第一个,最后一个可以是任何值),所以一所小学,一所高中,一所大学。
它看起来像:
tile_to_update elementary_school high_school university
2270210 583 10529 58151
但是,当我尝试分组时:
select * from dwtrat_edu_tempdb.test1
group by tile_to_update
我仅获得其中一列的值,而不是所有列的组合
tile_to_update elementary_school high_school university
2270210 null 10529 null
预先感谢您的帮助。
答案 0 :(得分:1)
如果您不关心任何特定值,则可以选择ANY_VALUE
/ MIN / MAX:
select tile_to_update,
ANY_VALUE(elementary_school),ANY_VALUE(high_school),ANY_VALUE(university)
from dwtrat_edu_tempdb.test1
group by tile_to_update
答案 1 :(得分:1)
也请尝试以下查询,让我知道它是否对您有用。
SELECT DISTINCT tile_to_update
,COALESCE(elementary_school)
,COALESCE(high_school)
,COALESCE(university)
FROM dwtrat_edu_tempdb.test1
答案 2 :(得分:0)
Lukasz Szozda回答了您的问题;但是,由于每列有不止1个非null值,所以我几乎可以保证您将自己设置为失败,因为这会导致不必要的数据丢失。您可能希望使用GROUP_CONCAT,而不是使用ANY_VALUE(),MIN(),MAX()或COALESCE()返回单个值,以便生成这样的值列表:
SELECT tile_to_update,
GROUP_CONCAT(elementary_school),
GROUP_CONCAT(high_school),
GROUP_CONCAT(university)
FROM dwtrat_edu_tempdb.test1
GROUP BY tile_to_update
结果:
"tile_to_update"=>"2270210", "elementary_school" =>"583, 321", "high_school" =>"10529", "university" =>"10529