2014-05-20 128 views
2

我有下列的表:逆透視表

SeqNo, Date, Code, Val1, Val2, Val3,.. Val20 

我需要得到這個代表(我想我應該從VAL1 UNPIVOT表部分Val20):

SeqNo, Date, Code, Val 

所有Val1 ..Val20列均轉至Val列。

而且我需要改變Date列值:

  • 對於「日期」,「VAL1」值不應改變。
  • 對於「Val2」,「日期」值應該減少1天。
  • 對於2天「VAL3」下降等
+0

請提供一些示例數據上下工夫,建立一個SQLFiddle – redsoxlost

回答

2

您可以用cross joincase聲明手工做的支點。你的版本有,因爲日期列的扭曲它,:

with nums as (
     select 1 as n union all 
     select n + 1 
     from nums 
     where n < 20 
    ) 
select t.seqno, dateadd(day, 1 - nums.n, t.date), t.code, 
     (case when nums.n = 1 then val1 
      when nums.n = 2 then val2 
      . . . 
      when nums.n = 20 then val20 
     end) as val 
from table t cross join 
    nums;