我遇到了 SUM() SQL函数的问题。
所以这是代码:
SUM(
CASE WHEN ( CASE
WHEN condition
THEN SUM(column * VAT)
END
) > 200
THEN something
END)
) AS 'something'
我想对列进行条件求和,并在另一个总和中使用此求和的结果。 但正如预期的那样,我们不能在另一个函数中使用聚合函数(或子查询)。
任何人都可以找到没有HAVING子句的解决方案吗?
答案 0 :(得分:1)
你可以在没有使用窗口函数进行分组的情况下完成...
SELECT
CASE WHEN CONDITION THEN
SUM(column * VAT) OVER (Partition by xxxx)
ELSE 0.0
END as sum
FROM t_whatever
然后你可以将它放入CTE,并从那里总结......
e.g。
;WITH CTE AS
(
SELECT
BP_Year,
BP_Budget,
CASE WHEN COUNT(BP_UID) OVER (PARTITION BY BP_Year) > 1 THEN
BP_Budget*100.0/NULLIF(SUM(BP_Budget) OVER (PARTITION by BP_Year) ,0.0)
ELSE 100
END AS Per100
FROM T_UPS_BudgetPositions
)
SELECT
BP_Year
,SUM(BP_Budget )
,SUM(Per100)
FROM CTE
GROUP BY BP_Year
答案 1 :(得分:0)
您可以使用包含第1个总和的派生表。
select sum(case when something > 200 then 1 end)
from (
select case when condition
then sum(column * vat)
end as something
from mytable
-- you may want to add a group by here
) t