如何让多个 CASE 结果出现在 SQL 服务器的同一行中
How to get multiple CASE results to appear on within the same row on SQL Server
我正在寻求一些帮助,以解决我试图从 AdventureWorks2012
使用 SQL Server 2014 实现的结果。
我要实现的结果是每个销售人员在财政季度的总销售额。
我希望结果是每行 1 个销售人员,其中 Q1、Q2、Q3、Q4 的总销售额(2012 年 7 月 - 2013 年 6 月)
SELECT DISTINCT
pp.LastName, sp.BusinessEntityID AS SalesPersonID,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 7 AND 9 THEN soh.SubTotal END) AS Q1,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 10 AND 12 THEN soh.SubTotal END) AS Q2,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 1 AND 3 THEN soh.SubTotal END) AS Q3,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 4 AND 6 THEN soh.SubTotal END) AS Q4
FROM
Sales.SalesPerson sp
INNER JOIN
Person.Person pp ON sp.BusinessEntityID = pp.BusinessEntityID
INNER JOIN
Sales.SalesOrderHeader soh ON sp.BusinessEntityID = soh.SalesPersonID
WHERE
soh.OrderDate BETWEEN '2012-07-01' AND '2013-06-30'
GROUP BY
sp.BusinessEntityID, pp.LastName, soh.OrderDate;
当前结果示例;
LastName SalesPersonID Q1 Q2 Q3 Q4
---------------------------------------------------------
Alberts 283 2443.24 NULL NULL NULL
Alberts 283 NULL NULL NULL 32344.342
Alberts 283 NULL 34234 NULL NULL
我所期待的;
LastName SalesPersonID Q1 Q2 Q3 Q4
-----------------------------------------------------------
Alberts 283 2443.24 2324 1142 686858
Jones 287 2443.24 2324 1142 686858
Jimenez 299 2443.24 2324 1142 686858
修正你的 GROUP BY
:
GROUP BY sp.BusinessEntityID, pp.LastName;
删除 soh.OrderDate
,因为您不希望每个日期单独一行。
请注意,SELECT DISTINCT
几乎不适合 GROUP BY
,当然也不适合此查询。
我正在寻求一些帮助,以解决我试图从 AdventureWorks2012
使用 SQL Server 2014 实现的结果。
我要实现的结果是每个销售人员在财政季度的总销售额。
我希望结果是每行 1 个销售人员,其中 Q1、Q2、Q3、Q4 的总销售额(2012 年 7 月 - 2013 年 6 月)
SELECT DISTINCT
pp.LastName, sp.BusinessEntityID AS SalesPersonID,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 7 AND 9 THEN soh.SubTotal END) AS Q1,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 10 AND 12 THEN soh.SubTotal END) AS Q2,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 1 AND 3 THEN soh.SubTotal END) AS Q3,
SUM(CASE
WHEN MONTH(soh.OrderDate) BETWEEN 4 AND 6 THEN soh.SubTotal END) AS Q4
FROM
Sales.SalesPerson sp
INNER JOIN
Person.Person pp ON sp.BusinessEntityID = pp.BusinessEntityID
INNER JOIN
Sales.SalesOrderHeader soh ON sp.BusinessEntityID = soh.SalesPersonID
WHERE
soh.OrderDate BETWEEN '2012-07-01' AND '2013-06-30'
GROUP BY
sp.BusinessEntityID, pp.LastName, soh.OrderDate;
当前结果示例;
LastName SalesPersonID Q1 Q2 Q3 Q4
---------------------------------------------------------
Alberts 283 2443.24 NULL NULL NULL
Alberts 283 NULL NULL NULL 32344.342
Alberts 283 NULL 34234 NULL NULL
我所期待的;
LastName SalesPersonID Q1 Q2 Q3 Q4
-----------------------------------------------------------
Alberts 283 2443.24 2324 1142 686858
Jones 287 2443.24 2324 1142 686858
Jimenez 299 2443.24 2324 1142 686858
修正你的 GROUP BY
:
GROUP BY sp.BusinessEntityID, pp.LastName;
删除 soh.OrderDate
,因为您不希望每个日期单独一行。
请注意,SELECT DISTINCT
几乎不适合 GROUP BY
,当然也不适合此查询。