Условие СУММ в SQL - PullRequest
       14

Условие СУММ в SQL

0 голосов
/ 08 мая 2018

Я хочу вычислить поле con_Amount и хочу указать общее значение D01, D02, .... D31 при условии Con_PubDate. если поле Con_PubDate Day = 1, то я хочу поместить сумму в D01, если поле Con_PubDate Day = 2, тогда я хочу поместить сумму в D02, аналогично в Day = 31, тогда я хочу поместить сумму в D31

Я пытаюсь выполнить следующий код в хранимой процедуре, но произошла ошибка. Кто-нибудь, пожалуйста, помогите мне решить эту проблему.

SELECT Con_Cnt_Code,
       Con_Dst_Code,
       Con_Cor_Code,
       SUM(CASE
            WHEN DATEPART(DAY,Con_PubDate) = 1 THEN con_Amount
       ELSE
            SUM(CASE
                WHEN DATEPART(DAY,Con_PubDate) = 2 THEN con_Amount
            ELSE
                 SUM(CASE
                WHEN DATEPART(DAY,Con_PubDate) = 31 THEN con_Amount
                END) AS D31
            END) AS D02
        END) AS D01
 FROM Contributions 
 GROUP BY Con_Cnt_Code,Con_Dst_Code,Con_Cor_Code

1 Ответ

0 голосов
/ 08 мая 2018

Возможно, вы хотите, чтобы каждая условная сумма выражения CASE представляла собой отдельный элемент в списке выбора, что-то вроде этого:

SELECT
    Con_Cnt_Code,
    Con_Dst_Code,
    Con_Cor_Code,
    SUM(CASE WHEN DATEPART(DAY,Con_PubDate) = 1  THEN con_Amount END) AS D01,
    SUM(CASE WHEN DATEPART(DAY,Con_PubDate) = 2  THEN con_Amount END) AS D02,
    -- and possibly other days as well
    SUM(CASE WHEN DATEPART(DAY,Con_PubDate) = 31 THEN con_Amount END) AS D31
FROM Contributions
GROUP BY
    Con_Cnt_Code, Con_Dst_Code, Con_Cor_Code;

По умолчанию SUM будет игнорировать значения NULL, поэтому вам может не потребоваться условие ELSE в выражениях CASE. Если вы добавите один, вы можете по умолчанию сумма равняется нулю.

...