如何将行值更改为列标题

时间:2011-11-21 17:02:37

标签: sql teradata

select
extract(year from datetimestamp ) Yr,extract(month from datetimestamp) Mn,
c.weekday_of_month wk, a.aircraft_type,count( a.aircraft_type)  from fcm_bv.Flights b
join fcm_bv.Fleet a on  b.aircraftid=a.tail 
 join SYS_CALENDAR.CALENDAR c
 on cast(b.datetimestamp AS DATE FORMAT 'YYYY-MM-DD') = cast(c.calendar_date AS DATE FORMAT 'YYYY-MM-DD')
where cast(datetimestamp as date) >= '2011-09-01'
and cast(datetimestamp as date) <= '2011-09-30'  order by wk
group by Yr,Mn,wk,a.fleet,a.aircraft_type

在查询之上运行时,我会像这样放弃

Yr      Mn  wk  AIRCRAFT_TYPE   Count(AIRCRAFT_TYPE)
2011    9   1   B737-700        1744
2011    9   1   B737-800        131
2011    9   1   B737-800W       2711
2011    9   1   B737-8BK        180
2011    9   1   B737-700W       329

但我需要以下格式输出

Yr   Mn    wk    B737-700    B737-800  B737-800W   B737-8BK    B737-700W      
2011 9      1      1744       131          2711        180         329

任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

在过去,当我需要这样做时,数据库是针对一个离散的,可管理的类别,以下SQL对我很有帮助:

SELECT EXTRACT(YEAR FROM b.datetimestamp) AS Yr
     , EXTRACT(MONTH FROM b.datetimestamp) AS Mn
     , C.weekday_of_month
     , COUNT(CASE WHEN a.aircraft_type = 'B737-700' THEN a.aircraft_type ELSE NULL END) AS B737-700
     , COUNT(CASE WHEN a.aircraft_type = 'B737-800' THEN a.aircraft_type ELSE NULL END) AS B737-800
     , /* Other Known Aircrafts */
     , COUNT(CASE WHEN a.aircrat_type NOT IN ('<list of known aircraft types>') THEN a.aircraft_type ELSE NULL END) AS Uncategorized_Aircraft
FROM fcm_bv.Flights b
join fcm_bv.Fleet a on  b.aircraftid=a.tail 
 join SYS_CALENDAR.CALENDAR c
 on cast(b.datetimestamp AS DATE FORMAT 'YYYY-MM-DD') = cast(c.calendar_date AS DATE FORMAT 'YYYY-MM-DD')
WHERE cast(datetimestamp as date) >= '2011-09-01'
  AND cast(datetimestamp as date) <= '2011-09-30'  order by wk
GROUP BY Yr,Mn,wk,a.fleet

如果您必须针对不断变化的类别进行调整,最好将旋转转移到选择的MS Excel或BI工具。

希望这有帮助。