【发布时间】:2016-09-21 04:03:37
【问题描述】:
请帮我解决这个问题。我有这样的数据:
ID Name TotalCost IsCorporate
---- ---------------- ---------- -----------
1 Wash, Dry & Fold 175.00 1
2 Hand Wash and Fold 275.00 0
3 Pressing Only 25.00 0
4 Hand Wash and Fold 205.00 1
5 Pressing Only 100.00 0
如果IsCorporate = 0 则Total Cost 将与Corporate 列对齐,如下所示:
ID Wash, Dry & Fold Hand Wash and Fold Pressing Only Corporate
---- ---------------- ----------------- -------------- -----------
1 175.00
2 275.00
3 25.00
4 205.00
5 100.00
这是我的存储过程代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ReportSales]
AS
BEGIN
SELECT
IDJO, ISCORP, ST.[Wash, Dry & Fold], ST.[Pressing Only],
ST.[Dry Clean], ST.[Hand Wash and Fold], ST.[Wash, Dry & Press],
ST.[Stain Removal], ST.[Hand Wash and Press], CORPORATE
FROM
(SELECT
JO.Id AS IDJO, CI.Active AS ISCORP, ST.Name,
ISNULL(JO.TotalCost, 0) AS TC
FROM
JobOrders JO
INNER JOIN
ClientInformations CI ON JO.ClientId = CI.Id
INNER JOIN
JobOrderDetails JOD ON JO.Id = JOD.JOrderId
INNER JOIN
ServiceTypes ST ON JOD.ServiceId = ST.Id
INNER JOIN
Payments P ON JO.Id = P.JobOrderId
INNER JOIN
PaymentStatus PS ON JO.PaymentStatusId = PS.Id
INNER JOIN
Status S ON JO.StatusId = s.Id) AS J
PIVOT
(SUM(TC) for Name IN ([Wash, Dry & Fold], [Pressing Only], [Dry
Clean], [Hand Wash and Fold], [Wash, Dry & Press], [Stain Removal],
[Hand Wash and Press], [Corporate]) ) AS ST
END
【问题讨论】:
-
我看不出这是一个真正的动态枢轴,但是在 PIVOT IMO 上使用条件聚合会更容易。例如
SELECT SUM(CASE WHEN Name = 'Wash, Dry & Fold' AND isCorporate = 1 THEN TC END), SUM(CASE WHEN Name = 'Pressing Only'...等以及额外的SUM(CASE WHEN isCorporate = 0 THEN TC END)
标签: sql-server stored-procedures pivot-table