如何在一笔金额的情况下汇总金额

时间:2015-10-08 12:32:39

标签: sql sql-server sum case

我遇到了 SUM() SQL函数的问题。

所以这是代码:

SUM(
CASE WHEN ( CASE 
            WHEN condition 
            THEN SUM(column * VAT)
            END
          ) > 200 
     THEN something
     END)
) AS 'something'

我想对列进行条件求和,并在另一个总和中使用此求和的结果。 但正如预期的那样,我们不能在另一个函数中使用聚合函数(或子查询)。

任何人都可以找到没有HAVING子句的解决方案吗?

2 个答案:

答案 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