将行转换为具有SQL Server 2008条件的列

时间:2014-01-06 17:55:24

标签: sql sql-server-2008 pivot

我正在寻找一种快速有效的转换方式:

ID  Type       Amount
0   Damages    1
0   Other      2
1   Damages    3
1   Other      4
2   Damages    5
2   Other      6

ID Damages Other
0  1       2
1  3       4
2  5       6

表中有大约200,000条记录,使用的是SQL Server 2008。

1 个答案:

答案 0 :(得分:3)

您可以通过几种不同的方式获得结果。您可以使用带有聚合函数的CASE表达式:

select id,
  sum(case when type ='Damages' then amount else 0 end) damages,
  sum(case when type ='Other' then amount else 0 end) other
from yourtable
group by id;

SQL Fiddle with Demo。或者,因为您使用的是SQL Server 2008,所以您可以使用PIVOT函数:

select id, Damages, Other
from yourtable
pivot
(
  sum(amount)
  for type in (Damages, Other)
) piv

请参阅SQL Fiddle with Demo