SQL是按另一列的值拆分一列的最有效方法
有没有更好的方法写这个?我想为每个end\u use\u data\u类型创建一个单独的值列。我还有一大堆“结束\使用\数据\类型\ id” 谢谢SQL是按另一列的值拆分一列的最有效方法,sql,Sql,有没有更好的方法写这个?我想为每个end\u use\u data\u类型创建一个单独的值列。我还有一大堆“结束\使用\数据\类型\ id” 谢谢 select coolingvalue, heatingvalue, ventvalue, miscvalue from analysis a join (SELECT aeup.value coolingvalue, analysis_id FROM annual_end_use_psft aeup WHERE aeup.end_use_da
select coolingvalue, heatingvalue, ventvalue, miscvalue
from analysis a
join (SELECT aeup.value coolingvalue, analysis_id FROM annual_end_use_psft aeup
WHERE aeup.end_use_data_type_id=1) cooling ON cooling.analysis_id=a.analysis_id
join (SELECT aeup.value heatingvalue, analysis_id FROM annual_end_use_psft aeup
WHERE aeup.end_use_data_type_id=2) heating ON heating.analysis_id=a.analysis_id
join (SELECT aeup.value ventvalue, analysis_id FROM annual_end_use_psft aeup
WHERE aeup.end_use_data_type_id=3) ventilation ON ventilation.analysis_id=a.analysis_id
join (SELECT aeup.value miscvalue, analysis_id FROM annual_end_use_psft aeup
WHERE aeup.end_use_data_type_id=4) misc ON misc.analysis_id=a.analysis_id
尝试使用
联接
和条件聚合:
select a.analysis_id,
max(case when aeup.end_use_data_type_id = 1 then aeup.value end) as coolingvalue,
max(case when aeup.end_use_data_type_id = 2 then aeup.value end) as heatingvalue,
max(case when aeup.end_use_data_type_id = 3 then aeup.value end) as ventvalue,
max(case when aeup.end_use_data_type_id = 4 then aeup.value end) as miscvalue
from analysis a join
annual_end_use_psft aeup
on cooling.analysis_id = a.analysis_id and
aeup.end_use_data_type_id in (1, 2, 3, 4)
group by a.analysis_id;
一种方法是使用pivot:对不起,我应该澄清一下——我想在select语句中再包含10列(包括analysis_id等)。不确定pivot是否仍然有效您使用的是哪种DBMS?博士后?甲骨文?谢谢戈登!我是新来的,所以这很有效(并且澄清了事情)。