1

我的 Sql 服务器中有以下类型的数据:-

Field         Value   Month

Administrative  5   November
Counteracting   7   November
District1       9   November
District2       6   November
Administrative  1   December
Counteracting   2   December
District1       3   December
District2       4   December
Administrative  9   January
Counteracting   8   January
District1       5   January
District2       6   January

现在的问题是我无法弄清楚如何以以下格式显示这些数据:-

Field         November   December   January

Administrative  5          1          9
Counteracting   7          2          8  
District1       9          3          5
District2       6          4          6
4

3 回答 3

4

您要做的是PIVOT数据。有几种方法可以执行此操作。如果您提前知道这些值,那么您可以对这些值进行硬编码。

您可以将聚合函数与CASE语句一起使用:

select field,
  sum(case when month ='November' then value end) November,
  sum(case when month ='December' then value end) December,
  sum(case when month ='January' then value end) January,
  etc
from yourtable
group by field

请参阅带有演示的 SQL Fiddle

在 SQL Server 2005+ 中,您可以使用以下PIVOT功能:

select field, November, December, January
from
(
  select field,
    value, month
  from yourtable
) src
pivot
(
  sum(value)
  for month in (November, December, January, etc)
) piv

请参阅带有演示的 SQL Fiddle

如果您有未知数量的值要转换为列,那么您可以使用动态 sql 来透视数据。

于 2013-01-02T21:48:26.217 回答
0

这是一个典型的旋转问题。查看 SQL Server PIVOT 语句: http: //msdn.microsoft.com/en-us/library/ms177410 (v=sql.105).aspx

它会解决你的问题。

于 2013-01-02T21:49:54.333 回答
0

您需要使用 Pivot,查看示例:

http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx

于 2013-01-02T21:50:12.653 回答