无法使用 group by 获得正确的 SUM
Unable to get the right SUM using group by
我一直在尝试获取 TotalCharge
、TotalCost
和 Total 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] 中删除 LaborName
和 EstimatedHours
=] 并按
分组
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
输出:
LaborName EstimatedHours TotalCost TotalCharge
Barnes, Ashley 1 9 9.9
Chelsea, Smith 1 9 30
Estimated Labor Totals 2 Mex$ 18 Mex$ 39.9
我一直在尝试获取 TotalCharge
、TotalCost
和 Total 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] 中删除 LaborName
和 EstimatedHours
=] 并按
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
输出:
LaborName EstimatedHours TotalCost TotalCharge
Barnes, Ashley 1 9 9.9
Chelsea, Smith 1 9 30
Estimated Labor Totals 2 Mex$ 18 Mex$ 39.9