我有一个看起来像这样的表:
|| id | year | userCode | jan | feb | ... ... ... | dec ||
jan - dec列中包含值(货币)数据。我希望它看起来像这样:
||id | year | month | userCode | value ||
这就是事情:我可以在同一个月内为同一个userCode提供两个值(我需要它们),所以我不能只使用SUM。有什么想法吗?
提前致谢!
答案 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)
你可以用两张桌子来做......
一张包含年份和月份的表格
|| Id |年|月| UserCode ||
|| 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
,因此您可以知道数据的来源。