我试图总结一个子查询,但不知道如何重写它:
FORMAT(
SUM(
CASE WHEN SOH.LASDLVNUM_0 <> ''
AND SOH.LASINVNUM_0 <> ''
AND MONTH(SOH.SHIDAT_0) = MONTH(GETDATE())
THEN
(Select (SID.NETPRI_0)
from x3v6.CICPROD.SINVOICED SID
where SID.NUM_0 = SOH.LASINVNUM_0
and SID.ITMREF_0 = SOQ.ITMREF_0
and SID.STOFCY_0 = SOQ.STOFCY_0)
* SOQ.INVQTY_0 * SOH.CHGRAT_0
ELSE 0.00 END),
'##,##0.00') as 'Invoiced (MTD)',
未收到错误消息“无法对包含聚合或子查询的表达式执行聚合函数。”
答案 0 :(得分:0)
我很好奇,因为我从未尝试过SUM子查询。我不建议它,但我尽量远离每行应用的子查询(例如列定义)。无论如何,你可以弄清楚如何用连接来解决你可以将你的case表达式移动到OUTER APPLY以及一些基本上允许你聚合子查询的东西......
DECLARE @Table AS TABLE (Id INT IDENTITY(1,1), Criteria INT, Criteria2 INT)
DECLARE @OtherTable AS TABLE (TID INT)
INSERT INTO @Table VALUES (1,1),(2,2),(3,3),(4,4)
INSERT INTO @OtherTable VALUES (1),(1),(2),(2),(3),(3),(4),(4)
SELECT
t.Id
,SUM(COALESCE(oa.Value,0))
FROM
@Table t
OUTER APPLY (SELECT
TID as Value
FROM
@OtherTable ot
WHERE
ot.TID = t.Id
AND t.Criteria % 2 = 0
AND t.Criteria2 % 2 = 0) oa
GROUP BY
t.Id
请注意,当您使用此方法时,技巧是WHEN条件被添加到OUTER APPLY中的子查询的WHERE条件
由于您使用了FORMAT()
,我也假设了SQL-SERVER