1

Я хочу использовать SUM() функция в поле «Сумма» в запросе 4 раза в одном поле с различных фильтров.

что-то вроде

Можно ли использовать одну и ту же функцию агрегата более одного раза в одном поле или столбце таблицы, используя различные условия фильтрации?

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

Здесь

первого SUM(Amount) должен быть рассчитан когда Mode='011' И Mode='012' от MainTable
второго SUM(Amount) должен рассчитываться при Mode like '03_' И Mode Like '05_' от MainTable
третьего SUM(Amount) должен быть рассчитан при Mode like '10_' от MainTable
четвёртая SUM(Amount) должен рассчитываться при (Mode !='011') и (Mode !='012')(Mode not Like '03_') и (Mode not Like '05_') от MainTable

Как это произошло? Я пробовал по-разному, но не мог получить результат так, как хотел.
Пожалуйста, помогите мне.
Спасибо заранее.

ответ

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; 

Или вы можете использовать функцию PIVOT:

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

Можем ли мы включить 2 файлеры в случае даного с оператором И? like (CASE when (mode = '012' And mode = '015)' then Amount end) Также мне нужно использовать и дикие карты. Является ли это возможным? –

+0

@NishantBhuskade Да, вы можете использовать более одного фильтра в 'CASE', даже wilcards – Taryn

+0

спасибо. вы решили мою проблему. –