1

以下のデータ構造を返すクエリがあります:

Course   Math   Science   Computer   Chemistry
------   ----   -------   --------   ---------
CI101     98
CI101     87
CI101             78
CI101             102
CI101                        23
CI101                        56
CI101                        89
CI101                                   45 

SQLを使用して次の構造にする方法は次のとおりです。

Course   Math   Science   Computer   Chemistry
------   ----   -------   --------   ---------
CI101     98      78        23          45
CI101     87      102       56
CI101                       89

これが私が試したSQLです:

select course,
   case
     when subject = 'MATH' then
      count
   end as MATH,
   case
     when subject = 'SCIENCE' then
      count
   end as SCIENCE,
   case
     when subject = 'COMPUTER' then
      count
   end as COMPUTER,
   case
     when subject = 'CHEMISTRY' then
      count
   end as CHEMISTRY
 from t_course
 GROUP BY course, subject, count

テーブル構造:

Course    Subject     Count
------    -------     -----
CI101     Math         98
....

よろしくお願いします。

4

1 に答える 1

1

これを試して:

私はOracleを持っておらず、この質問に対する答えも見当たらなかったので、SQLサーバーでこれを実行しました。これは、Oraclesqlに簡単に変換できます。

変換が必要なのは、ROW_NUMBER()over(order by [count])as row_numだけだと思います。 これは、基本的に各セットにシーケンス番号を与えるためのものです。

select CO.course,MA.count as  'MATH',SC.count as 'SCIENCE',CO.count as 'COMPUTER',CH.count as 'CHEMISTRY' from 
(select course,[count],ROW_NUMBER() over(order by  [count]) as row_num from t_course where subject = 'MATH')MA full outer join 
(select course,[count],ROW_NUMBER() over(order by  [count]) as row_num from t_course where subject = 'SCIENCE')SC on SC.row_num=MA.row_num full outer join 
(select course,[count],ROW_NUMBER() over(order by  [count]) as row_num from t_course where subject = 'COMPUTER')CO on CO.row_num=SC.row_num full outer join 
(select course,[count],ROW_NUMBER() over(order by  [count]) as row_num from t_course where subject = 'CHEMISTRY')CH on CO.row_num=CH.row_num  

こちらのSQLフィドルデモをご覧ください

于 2012-08-01T06:35:51.133 に答える