在 SQL Server 中旋转表

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

原始产品版本:SQL Server
原始 KB 编号: 175574

摘要

本文介绍如何旋转SQL Server表。 假设你有一个名为 的 QTRSALES表。 表包含列 YEARQUARTERAMOUNT ,数据采用以下格式。

注意

1996年第四季度没有行:

年份 季度 Amount
1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 4 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82

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

YEAR 第 1 季度 第 2 季度 Q3 第 4 季度
1995 125,000.90 136,000.75 212,000.34 328,000.82
1996 328,000.82 422,000.13 728,000.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

查询大型表

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

SELECT 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 - 使用 PIVOT 和 UNPIVOT