在 SQL Server 中旋转表

本文介绍如何在 SQL Server 中旋转表。

原始产品版本:   SQL Server
原始 KB 数:   175574

摘要

本文介绍如何旋转 SQL Server 表。 假设您有一个名为的表 QTRSALES 。 该表包含具有 YEAR 以下格式的列、列 QUARTERAMOUNT 数据。

备注

1996的第四季度没有行:

Year 季度 Amount
1995 1 125000.90
1995 2 136000.75
1995 3 212000.34
1995 4 328000.82
1996 3 728000.35
1996 2 422000.13
1996 1 328000.82

现在,假设您要旋转表格,以便您可以按以下格式查看数据:

YEAR Q1 3
1995 125000.90 136000.75 212000.34 328000.82
1996 328000.82 422000.13 728000.35 0.00

您要用于旋转表的查询在本文的下一节中。

旋转表的示例查询

以下是您将用来旋转表的查询:

SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR

查询大型表

对于大型表,此查询的速度将更快:

year=q.year,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) as Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) as Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) as Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) as Q4
FROM qtrsales q
GROUP BY year

参考

FROM-Using PIVOT 和 UNPIVOT