J'ai une table avec les colonnes suivantes:
SeqNo, Date, Code, Val1, Val2, Val3,.. Val20
J'ai besoin d'get cette représentation (je suppose que je devrais unpivot partie de la table de Val1 à Val20):
SeqNo, Date, Code, Val
où toutes les colonnes Val1 ..Val20
vont à la colonne Val
.
Et de plus j'ai besoin de changer les valeurs de la colonne Date
:
Vous pouvez faire le pivot manuellement avec une cross join
et une instruction case
. Votre version a une torsion à cause de la colonne de date:
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;