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变量。

任何想法如何旋转列?

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 回答