【发布时间】:2018-07-13 19:56:52
【问题描述】:
我有一个带有月份偏移量的表。我想以此列为中心,但对于输出,我想使用偏移量计算月份名称/年份。
我需要能够在没有动态 SQL 的情况下做到这一点,而我必须 execute。
在生产中,我的MyMonthOffset 可能会增加到 24(或更多)。我知道在PIVOT FOR 部分我必须像FOR MyMonthOffset IN ("0", "1", "2", "3", ... "24") 一样列出所有这些。
输入表
CREATE TABLE dbo.MyData
(
MyName [NVARCHAR](10) NOT NULL
, MyMonthOffset [INT] NOT NULL
, MyCount [INT] NOT NULL
) ON [DEFAULT];
INSERT INTO dbo.MyData
VALUES
('four', 0, 6),
('four', 1, 8),
('four', 1, 4),
('four', 2, 8),
('four', 2, 5),
('four', 2, 5),
('four', 3, 4),
('four', 3, 8),
('four', 3, 8),
('one', 0, 3),
('one', 0, 5),
('one', 0, 4),
('one', 0, 2),
('one', 1, 4),
('one', 2, 1),
('one', 2, 1),
('one', 3, 9),
('three', 1, 1),
('three', 3, 6),
('three', 3, 9),
('three', 3, 7),
('two', 0, 10),
('two', 0, 1),
('two', 1, 7),
('two', 3, 7)
+--------+---------------+---------+
| MYNAME | MYMONTHOFFSET | MYCOUNT |
+--------+---------------+---------+
| four | 0 | 6 |
| four | 1 | 8 |
| four | 1 | 4 |
| four | 2 | 8 |
| four | 2 | 5 |
| four | 2 | 5 |
| four | 3 | 4 |
| four | 3 | 8 |
| four | 3 | 8 |
| one | 0 | 3 |
| one | 0 | 5 |
| one | 0 | 4 |
| one | 0 | 2 |
| one | 1 | 4 |
| one | 2 | 1 |
| one | 2 | 1 |
| one | 3 | 9 |
| three | 1 | 1 |
| three | 3 | 6 |
| three | 3 | 9 |
| three | 3 | 7 |
| two | 0 | 10 |
| two | 0 | 1 |
| two | 1 | 7 |
| two | 3 | 7 |
+--------+---------------+---------+
当前枢轴输出
SELECT
*
FROM
(
SELECT
MyName
, MyMonthOffset
, MyCount
FROM dbo.MyData
) SourceTable
PIVOT
(
SUM(MyCount)
FOR MyMonthOffset IN ("0", "1", "2", "3")
) PivotTable
+--------+------+----+------+----+
| MYNAME | 0 | 1 | 2 | 3 |
+--------+------+----+------+----+
| four | 6 | 12 | 18 | 20 |
| one | 14 | 4 | 2 | 9 |
| three | NULL | 1 | NULL | 22 |
| two | 11 | 7 | NULL | 7 |
+--------+------+----+------+----+
预期/期望的输出
+--------+--------+--------+--------+--------+
| MYNAME | JUL 18 | AUG 18 | SEP 18 | OCT 18 |
+--------+--------+--------+--------+--------+
| four | 6 | 12 | 18 | 20 |
| one | 14 | 4 | 2 | 9 |
| three | NULL | 1 | NULL | 22 |
| two | 11 | 7 | NULL | 7 |
+--------+--------+--------+--------+--------+
【问题讨论】:
-
像这样命名列需要动态 SQL。
标签: sql sql-server pivot sql-server-2014