【发布时间】:2017-11-16 07:34:44
【问题描述】:
我正在尝试以多个列为中心,并且我正在使用 SQL Server 2014,但是,我无法弄清楚如何做到这一点。到目前为止,这是我尝试过的:
DECLARE @Table TABLE (
Name NVARCHAR(MAX),
TypeId INT,
TotalOrders INT,
GrandTotal MONEY
)
INSERT INTO @Table
(Name, TypeId, TotalOrders, GrandTotal)
VALUES
('This Month', 1, 10, 1),
('This Month', 2, 5, 7),
('This Week', 1, 8, 3),
('Last Week', 1, 8, 12),
('Yesterday', 1, 10, 1),
('Yesterday', 2, 1, 5)
这会产生以下结果:
Name TypeId TotalOrders GrandTotal
-------------------------------- ----------- ----------- ---------------------
This Month 1 10 1.00
This Month 2 5 7.00
This Week 1 8 3.00
Last Week 1 8 12.00
Yesterday 1 10 1.00
Yesterday 2 1 5.00
要将这些行放入列中,我已经尝试过:
SELECT
TypeId,
ISNULL([Yesterday], 0) AS YesterdayTotalOrders,
ISNULL([This Week], 0) AS ThisWeekTotalOrders,
ISNULL([Last Week], 0) AS LastWeekTotalOrders,
ISNULL([This Month], 0) AS ThisMonthTotalOrders
FROM
(SELECT Name, TypeId, TotalOrders FROM @Table) AS src
PIVOT (
SUM(TotalOrders) FOR Name IN (
[Yesterday],
[This Week],
[Last Week],
[This Month]
)
) AS p1
这会产生以下结果集:
TypeId YesterdayTotalOrders ThisWeekTotalOrders LastWeekTotalOrders ThisMonthTotalOrders
----------- -------------------- ------------------- ------------------- --------------------
1 10 8 8 10
2 1 0 0 5
现在,我需要为GrandTotal 提供一些其他列,例如YesterdayGrandTotal、ThisWeekGrandTotal 等等,但我不知道如何实现这一点。
任何帮助将不胜感激。
更新#1:这是预期的结果集:
TypeId YesterdayTotalOrders ThisWeekTotalOrders LastWeekTotalOrders ThisMonthTotalOrders YesterdayGrandTotal ThisWeekGrandTotal LastWeekGrandTotal ThisMonthGrandTotal
----------- -------------------- ------------------- ------------------- -------------------- --------------------- --------------------- --------------------- ---------------------
1 10 8 8 10 1.00 3.00 12.00 1.00
2 1 0 0 5 5.00 0.00 0.00 7.00
【问题讨论】:
标签: sql sql-server pivot sql-server-2014