0
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

誰でも私を助けてくれますか

4

1 に答える 1

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 ツールにピボットすることをお勧めします。

お役に立てれば。

于 2011-11-22T03:44:31.657 に答える