Как выбрать несколько столбцов и сгруппировать по одному столбцу - PullRequest
1 голос
/ 05 августа 2020

Я хочу суммировать C .AMOUNT на основе столбца number. Например, столбец number в тех же 4 числах, затем я хочу суммировать столбец C.AMOUNT на основе того же числа в столбце number и отображать суммированный столбец в столбце FINAL_AMOUNT

введите описание изображения здесь

    SELECT A.NUMBER, 
       B.AGE, 
       C.PRODUCT_NAME, 
       SUM(C.AMOUNT) AS FINAL_AMOUNT, 
       (CASE
            WHEN C.PRODUCT_NAME LIKE '%D%'
            THEN 'Y'
            ELSE 'N'
        END) AS D, 
       (CASE
            WHEN C.PRODUCT_NAME LIKE '%E%'
            THEN 'Y'
            ELSE 'N'
        END) AS E, 
       (CASE
            WHEN C.PRODUCT_NAME LIKE '%F%'
            THEN 'Y'
            ELSE 'N'
        END) AS F, 
       (CASE
            WHEN C.PRODUCT_NAME LIKE '%G%'
                 OR C.PRODUCT_NAME LIKE '%H%'
                 OR C.PRODUCT_NAME LIKE '%J%'
            THEN 'Y'
            ELSE 'N'
        END) AS J
FROM [A].[DBO].[A]
     LEFT JOIN [B].[DBO].[B] B ON A.NUMBER = B.NUMBER
     LEFT JOIN [C].[DBO].[C] C ON A.NUMBER = C.NUMBER
WHERE B.REPORT_DATE = '20200728'
GROUP BY A.NUMBER;

Это тот запрос, который я использовал, но нахожу такую ​​ошибку:

Msg 8120, уровень 16, состояние 1, строка 1 столбец 'B.DBO .B 'недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

1 Ответ

1 голос
/ 05 августа 2020

Похоже, вам нужна сумма окон, а не агрегация.

То есть замените:

SUM(C.amount) as FINAL_AMOUNT

на:

SUM(C.amount) OVER(PARTITION BY A.NUMBER) as FINAL_AMOUNT

Соответственно, вам нужно чтобы удалить из запроса предложение GROUP BY.

...