将数据显示为列

时间:2017-03-02 03:52:48

标签: sql postgresql pivot postgresql-9.1

在给定的表格中;我正在查询显示某些列,如下所示

select an.animals_key,           
       an.anim_name,
       an.sex,
       an.date_of_birth,
       tt.trait_key,            
       --case when tt.trait_key = 152 then 'Left Eye Pigment'
            --when tt.trait_key = 153 then 'Right Eye Pigment' end as trait_key,
       tt.trait_value,
       tt.observation_date

 from animals an
 join traits tt on tt.soc_code = an.soc_code and tt.animals_key = an.animals_key and tt.trait_key in (152,153)
 where an.soc_code = 'AUHF' limit 10

此查询产生了以下数据。

enter image description here

有什么办法,我可以将152作为一列,将153作为一列,以便我可以将所有特征值放在这些列中

1 个答案:

答案 0 :(得分:1)

如果始终预定义列数(在您的情况下为152,153),则可以执行条件聚合

select an.animals_key, an.anim_name, an.sex, an.date_of_birth, tt.observation_date
       min(case when tt.trait_key = 152 then tt.trait_value end) "152",
       min(case when tt.trait_key = 153 then tt.trait_value end) "153"
  from animals an join traits tt 
    on tt.soc_code = an.soc_code 
   and tt.animals_key = an.animals_key
   and tt.trait_key in (152, 153)
 where an.soc_code = 'AUHF'
 group by an.animals_key, an.anim_name, an.sex, an.date_of_birth, tt.observation_date