0

作成された一時テーブルがあり、構造/データが次のようになっているとします

  Type        Lang    N_cnt        Pcnt      T1      T2       T3      T4
============================================================================
ClassroomA      1      165897      1232     6439    1135     4516     1756
ClassroomA      2      175127      1254     6439    1135     1285     1953
ClassroomB      1      179515      1284     6439    1762     3945     1957
ClassroomB      2      159683      2041     6439    1575     4745     1955

T1この結果が得られるようにT2、、、列をT3ピボットしたいT4

   Type       SubType   Lang      N_cnt            P_cnt   
==============================================================
ClassroomA      NULL     1       165897          1232  
NULL            "T1"     1   6439/165897     6439/1232       
NULL            "T2"     1       *calculation*   *calculation*
NULL            "T3"     1       *calculation*   *calculation*
NULL            "T4"     1       *calculation*   *calculation*
ClassroomA      NULL     2       175127          1254  
NULL            "T1"     2       6439/175127     6439/1254       
NULL            "T2"     2       *calculation*   *calculation*
NULL            "T3"     2       *calculation*   *calculation*
NULL            "T4"     2       *calculation*   *calculation*

calculationの値を取得し、それを使用して計算を行う場所であることに注意してくださいT{x}(最初の の例を示しますT1)。Tまた、実際には、これらの変数を約 10 個上回っていることも付け加えておきます。

列をピボットする方法はありますか?

4

1 に答える 1

3

次のようなものを使用できます。

select type, 
  case when subtype = 'start' then null else subtype end subtype,
  lang, 
  case when subtype = 'start' then n_cnt else value/(n_cnt * 1.0) end n_cnt,
  case when subtype = 'start' then pcnt else value/(pcnt * 1.0) end pcnt
from
(
  select type, lang, n_cnt, pcnt, 
    T1, T2, T3, T4, 0 as start
  from table1
) x
unpivot 
(
  value 
  for subtype in (T1, T2, T3, T4, start)
) un
order by type, lang, subtype;

デモで SQL Fiddle を参照してください

于 2012-10-19T19:44:39.467 に答える