1

我想使用SUM()功能查询中的'金额'字段4次在同一字段上不同的过滤器



使用不同的过滤条件,我们可以在同一个表格域或列上多次使用相同的聚合函数吗?

SELECT Date1,CC,BU, SUM(Amount),SUM(Amount),SUM(Amount),SUM(Amount) 
FROM MainTable<br> 
GROUP BY CC,BU,Date1 

这里

应该当从MainTable
Mode='011'Mode='012'来计算 当从MainTable
Mode like '03_'Mode Like '05_' 应计算在第二SUM(Amount)应计算Mode like '10_'来自MainTable
应计算时(Mode !='011')和MainTable

(Mode !='012')(Mode not Like '03_')(Mode not Like '05_')如何做到这一点?我尝试了很多方法,但无法按照我的想法得到结果。
请帮帮我。
预先感谢您。

回答

7

可以使用聚合函数与CASE

SELECT Date1, 
    CC, 
    BU, 
    SUM(case when mode = '011' then Amount end) Mode011, 
    SUM(case when mode = '012' then Amount end) Mode012, 
    SUM(case when mode = '013' then Amount end) Mode013, 
    SUM(case when mode = '014' then Amount end) Mode014 
FROM MainTable 
GROUP BY CC,BU,Date1; 

或者你也可以使用旋转功能:

select date1, CC, BU, 
    [011] Mode011, 
    [012] Mode012, 
    [013] Mode013, 
    [014] Mode014 
from 
(
    select date1, CC, BU, mode, amount 
    from maintable 
) src 
pivot 
(
    sum(amount) 
    for mode in ([011], [012], [013], [014]) 
) piv 
+0

我们可以包括与案件statment AND运算2个文件管理器? like(CASE when(mode ='012'and mode ='015)'then Amount end) 我也需要使用通配符。可能吗? – 2013-05-10 03:52:34

+0

@NishantBhuskade是的,你可以在'CASE'中使用多个过滤器,即使wilcards – Taryn 2013-05-10 11:22:45

+0

谢谢。 你解决了我的问题。 – 2013-05-10 12:46:33

相关问题