如何让多个 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,当然也不适合此查询。