2013-12-13 4 views
0

Есть ли лучший способ написать это? Я хочу создать отдельный столбец значений для каждого end_use_data_type. У меня есть еще больше «end_use_data_type_id»SQL Самый эффективный способ разделения столбца на значения другого столбца

Спасибо!

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 
+0

Одним из способов может быть с помощью шарнира: http://technet.microsoft.com/en-us/library/ms177410%28v=sql. 105% 29.aspx – alex

+0

Извините, что я должен был уточнить - есть еще 10 столбцов, которые я хочу включить в оператор select (включая анализ_ид и т. Д.). Не уверен, что pivot все равно будет работать – arun12345

+1

Какая СУБД вы используете? Postgres? Oracle? –

ответ

1

Попробуйте использовать условный агрегацию и join:

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; 
+0

Спасибо, Гордон! Я новичок в этом, так что работал (и разъясняет вещи). – arun12345

Смежные вопросы