0

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

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

jan - dec 列在其中保存价值(金钱)数据。我希望它看起来像这样:

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

事情是这样的:我可以在同一个月份为同一个 userCode 设置两个值(而且我都需要它们),所以我不能只使用 SUM。有任何想法吗?

提前致谢!

4

3 回答 3

2

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

代码将与此类似:

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

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

于 2013-02-14T19:19:39.623 回答
0

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

一张表,里面有年份和月份

年月

|| 身份证 | 年份 | 月 | 用户代码 ||

年月值

|| 身份证 | 年月号 | 价值 ||

于 2013-02-14T18:57:53.857 回答
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,以便您知道数据的来源。

于 2013-02-14T18:58:14.370 回答