转置SQL表

时间:2014-03-26 08:53:57

标签: sql-server

我想将test表转置为基于Flip的{​​{1}}表。 SQL Fiddle通过从Prop_id

填充翻转表中的Null值

非常感谢

修改

表格结构取自test.cost.

来源:

SqlFiddle

目的地:

CREATE TABLE test(
    Prop_id varchar(10),
    year varchar(4),
    cost float(8)
)

1 个答案:

答案 0 :(得分:1)

这是一个简单的PIVOT :.

INSERT INTO Flip(Prop_id, y1997, y1998, y1999, y2000, y2001, ... )
  SELECT prop_id, [1997], [1998], [1999], [2000], [2001], ...
  FROM
    test
  PIVOT
  (
   SUM(cost)
   for year IN ([1997], [1998], [1999], [2000], [2001], ...)
  )pvt;

SqlFiddle here

如果您不想手动指定列名称,可以将其更改为dynamic query like so

一个可能的建议是更改翻转y1997等的列以匹配与源表相同的类型(test.cost

如果可能的话,使用DECIMAL来模拟货币 - 由于rounding issues

,浮动和双打不适合汇款