SQL是按另一列的值拆分一列的最有效方法

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

有没有更好的方法写这个?我想为每个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_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?博士后?甲骨文?谢谢戈登!我是新来的,所以这很有效(并且澄清了事情)。