无法使用 group by 获得正确的 SUM

Unable to get the right SUM using group by

我一直在尝试获取 TotalChargeTotalCostTotal Estimated hours

虽然我的脚本没有错误,但我无法获得上述列的总和。

我的脚本如下:

SELECT
  l.LaborName,
  l.EstimatedHours,
  l.TotalCost,
  l.TotalCharge,
  w.CurrencySymbol,
  SUM(l.TotalCost) AS totalCost,
  SUM(l.TotalCharge) AS totalCharge,
  SUM(l.EstimatedHours) AS totalHours
FROM WOLabor l
INNER JOIN WO w
  ON l.WOPK = w.WOPK
WHERE l.WOPK = 10100
AND RecordType = 1
GROUP BY l.LaborName,
         l.EstimatedHours,
         l.TotalCost,
         l.TotalCharge,
         w.CurrencySymbol

这是我的输出:

我的预期输出是

您正在按您只需要总和的列进行分组。 从 GROUP BY:

中删除它们
 SELECT
      l.LaborName,
      w.CurrencySymbol,
      SUM(l.TotalCost) AS totalCost,
      SUM(l.TotalCharge) AS totalCharge,
      SUM(l.EstimatedHours) AS totalHours
    FROM WOLabor l
    INNER JOIN WO w
      ON l.WOPK = w.WOPK
    WHERE l.WOPK = 10100
    AND RecordType = 1
    GROUP BY l.LaborName,
             w.CurrencySymbol

您似乎想要 window 功能:

SELECT distinct l.LaborName, l.EstimatedHours, l.TotalCost,
       l.TotalCharge, w.CurrencySymbol,
       SUM(l.TotalCost) over (partition by l.LaborName, w.CurrencySymbol) AS totalCost,
       SUM(l.TotalCharge) over (partition by l.LaborName, w.CurrencySymbol) AS totalCharge,
       SUM(l.EstimatedHours) over (partition by l.LaborName, w.CurrencySymbol) AS totalHours
FROM WOLabor l INNER JOIN 
     WO w
     ON l.WOPK = w.WOPK
WHERE l.WOPK = 10100 AND RecordType = 1;

我怀疑您需要 overall sum,如果需要,请删除 partition 子句

SELECT . . .
       SUM(l.TotalCost) over () AS totalCost,
       SUM(l.TotalCharge) over () AS totalCharge,
       SUM(l.EstimatedHours) over () AS totalHours
FROM WOLabor l INNER JOIN 
     WO w
     ON l.WOPK = w.WOPK
WHERE l.WOPK = 10100 AND RecordType = 1;

因为你没有接受任何给定的答案,我猜你正在寻找 "whole data" 总和,所以你应该从 [=22] 中删除 LaborNameEstimatedHours =] 并按

分组
SELECT
  l.LaborName,
  CONVERT(NVARCHAR, l.EstimatedHours) [EstimatedHours],
  CONVERT(NVARCHAR, l.TotalCost) TotalCost,
  CONVERT(NVARCHAR, l.TotalCharge) TotalCharge
FROM WOLabor l
INNER JOIN WO w
  ON l.WOPK = w.WOPK
WHERE l.WOPK = 10100
AND RecordType = 1

UNION ALL

SELECT
  'Estimated Labor Totals',
  SUM(l.EstimatedHours) AS totalHours,
  --CONCAT(W.CURRENCYSYMBOL, ' ', CONVERT(NVARCHAR, SUM(L.TOTALCOST))),
  --CONCAT(W.CURRENCYSYMBOL, ' ', CONVERT(NVARCHAR, SUM(L.TOTALCHARGE))) 
  W.CURRENCYSYMBOL + ' ' + CONVERT(NVARCHAR, SUM(L.TOTALCOST)),
  W.CURRENCYSYMBOL + ' ' + CONVERT(NVARCHAR, SUM(L.TOTALCHARGE))     
FROM WOLabor l
INNER JOIN WO w
  ON l.WOPK = w.WOPK
WHERE l.WOPK = 10100
AND RecordType = 1
GROUP BY W.CURRENCYSYMBOL

sql fiddle here

输出:

LaborName               EstimatedHours  TotalCost   TotalCharge
Barnes, Ashley          1               9           9.9
Chelsea, Smith          1               9           30
Estimated Labor Totals  2               Mex$ 18     Mex$ 39.9