Hemil Gandhi Ответов: 3

Группа с оператором


Дорогие Все,

У меня есть ниже упомянутый запрос я использовал оператор case для суммирования баланса на основе конкретного критерия ,я получаю ошибку group by при выполнении запроса.

любая помощь будет оценена по достоинству,

Что я уже пробовал:

select brcode,count(Acno),sum(balance) as Outstanding, case when NPACode>0 then sum(balance) else  0 end as NPA from #temploan 
group by BrCode order by BrCode

3 Ответов

Рейтинг:
4

Hemil Gandhi

select brcode,count(Acno),sum(balance) as Outstanding, SUM(case when NPACode>0 then balance else  0 end) as NPA from #temploan 
group by BrCode order by BrCode


ZurdoDev

Нет

Hemil Gandhi

Этот запрос решил мою проблему.

ZurdoDev

Нет, это не так. Это то же самое, что и в вашей операции, которая имела проблему.

Maciej Los

Это точная копия решения № 2 Йоргена Андерссона. Не публикуйте такой контент, как ваше собственное решение.

Hemil Gandhi

замечено сэр

Рейтинг:
15

Jörgen Andersson

Вам также нужно сгруппироваться по "NPACode > 0"

Самый простой способ должен быть:

SELECT  brcode
       ,count(Acno)
       ,sum(balance) AS Outstanding
       ,CASE 
            WHEN NPACode > 0
                THEN sum(balance)
            ELSE 0
        END AS NPA
FROM    #temploan
GROUP BY BrCode
        ,CASE WHEN NPACode > 0 THEN 1 ELSE 0 END
ORDER BY BrCode


<edit>
Мне интересно, какова цель выдающихся vs NPA, они были бы одинаковыми, если бы NPACode был > 0

У меня такое чувство, что это то, чего ты хочешь.:
SELECT  brcode
       ,count(Acno)
       ,sum(balance) AS Outstanding
       ,SUM(
            CASE 
                WHEN NPACode > 0
                    THEN balance
                ELSE 0
            END
            ) AS NPA
FROM    #temploan
GROUP BY BrCode
ORDER BY BrCode
</edit>


Maciej Los

5ed!

Рейтинг:
1

Sandeep Mewara

Хотя вы не разделили ошибку, поверьте, что ошибка будет заключаться в том, что вы сгруппировались только по brcode и ваш выбор имеет npaCode используется не в каких-либо агрегатных функциях.

Для этого были бы разные решения, одним из которых было бы добавление NPACode в предложение Group by.
Попробуй:

select 
    brcode,
    count(Acno),
    sum(balance) as Outstanding, 
    case 
        when NPACode>0 then sum(balance) 
        else  0 
    end as NPA 
from 
    #temploan 
group by 
    BrCode, NPACode 
order by 
    BrCode

Более детальные обсуждения и другие способы справиться с этим: sql - GROUP BY + CASE оператор[^]


Jörgen Andersson

Ну, это, вероятно, не сработает.
Вы не можете использовать NPA в группе by, если она создана в Select.

Sandeep Mewara

Извинения. Я написал NPACode, а затем перешел на NPA, думая иначе. Наличие NPACode будет работать как допустимый запрос в groupby. Учитывая, что NPA создается там, это не влияет на group by.

Я вижу ваше решение, и да, это еще один действительный способ, как описано в ссылке для обсуждения выше.

Спасибо, что проверили и поделились друг с другом. :большой палец:

Jörgen Andersson

Ну, вы не получите ошибку, но вы получите строку для каждого значения NPACode, а не только для NPACode > 0

Sandeep Mewara

Правда. Это относилось бы к намерению запроса. :большой палец вверх: