3
CREATE TABLE #TableA
(
A VARCHAR(50),
Allocations INT,
Seats INT,
EndDate DATETIME
);
插入表脚本
INSERT INTO #TableA
VALUES ('ABC',450,23,'2017-10-05'),
('ABC',23,765,'2017-05-01'),
('PQR',54,34,'2017-07-04'),
('ABC',234,45,'2017-11-27'),
('PQR',987,76,'2017-03-05'),
('ABC',76,65,'2017-02-23'),
('PQR',89,324,'2017-08-14'),
('ABC',45,34,'2017-07-13');
输出的#TableA
A | Allocations | Seats | EndDate |
-----+---------------+---------+-----------------------------+
ABC | 450 | 23 | 2017-10-05 00:00:00.000 |
ABC | 23 | 765 | 2017-05-01 00:00:00.000 |
PQR | 54 | 34 | 2017-07-04 00:00:00.000 |
ABC | 234 | 45 | 2017-11-27 00:00:00.000 |
PQR | 987 | 76 | 2017-03-05 00:00:00.000 |
ABC | 76 | 65 | 2017-02-23 00:00:00.000 |
PQR | 89 | 324 | 2017-08-14 00:00:00.000 |
ABC | 45 | 34 | 2017-07-13 00:00:00.000 |
我想下面的查询是动态的:
WITH T AS
(
SELECT
A, thing, priority, value, d
FROM
#TableA
CROSS APPLY (VALUES(CAST(EndDate AS DATE)))D(d)
CROSS APPLY (VALUES(1, 'A', NULL),
(2, 'Allocations', Allocations),
(3, 'Seats', Seats)) V(priority, thing, value)
)
SELECT
thing,
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-02-23],0) AS VARCHAR(50)) END AS [2017-02-23],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-03-05],0) AS VARCHAR(50)) END AS [2017-03-05],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-05-01],0) AS VARCHAR(50)) END AS [2017-05-01],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-07-04],0) AS VARCHAR(50)) END AS [2017-07-04],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-07-13],0) AS VARCHAR(50)) END AS [2017-07-13],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-08-14],0) AS VARCHAR(50)) END AS [2017-08-14],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-10-05],0) AS VARCHAR(50)) END AS [2017-10-05],
case when thing = 'A' THEN A ELSE CAST(ISNULL([2017-11-27],0) AS VARCHAR(50)) END AS [2017-11-27]
FROM
T
PIVOT
(SUM(value) FOR d in (
[2017-02-23],
[2017-03-05],
[2017-05-01],
[2017-07-04],
[2017-07-13],
[2017-08-14],
[2017-10-05],
[2017-11-27])) P
ORDER BY A, priority;
这里我想要动态字符串来生成EndDate列并执行该查询,并且必须给出输出。
添加乌尔期望的结果。 –