不同的表格布局

时间:2013-02-14 18:54:45

标签: sql sql-server unpivot

我有一个看起来像这样的表:

|| id  | year |  userCode  |  jan  |  feb  |  ... ... ... |  dec  ||

jan - dec列中包含值(货币)数据。我希望它看起来像这样:

||id  |  year  |  month  |  userCode  |  value ||

这就是事情:我可以在同一个月内为同一个userCode提供两个值(我需要它们),所以我不能只使用SUM。有什么想法吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

在SQL Server 2005+中,您可以使用UNPIVOT函数轻松完成此操作,该函数可将数据从列转换为行。

代码与此类似:

select id, year, month, usercode, value
from yourtable
unpivot
(
  value
  for month in (Jan, Feb, Mar, Apr, May,
                Jun, Jul, Aug, Sep, Oct,
                Nov, Dec)
) unpiv

一旦行中的数据,您就可以执行所需的任何类型的聚合。

答案 1 :(得分:0)

你可以用两张桌子来做......

一张包含年份和月份的表格

YearMonths

|| Id |年|月| UserCode ||

YearMonthsValues

|| Id | YearMonthId |价值||

答案 2 :(得分:0)

您可以使用union all执行此操作:

select year, month, userCode, jan, 'jan' as which as value from t union all
select year, month, userCode, feb, 'feb' as which as value from t union all
. . .
select year, month, userCode, dec, 'dec' as which as value from t

我添加了一个额外的列which,因此您可以知道数据的来源。