SQL суммирует динамический стержень - PullRequest
0 голосов
/ 27 октября 2018

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

Мой SQL ниже

SELECT @Cols = STUFF((SELECT  ',' +QUOTENAME(PRD_ValidDate)
            FROM #Table
            GROUP BY PRD_ValidDate
            ORDER BY PRD_ValidDate
        FOR XML PATH (''), Type).value('.','NVARCHAR(MAX)'),1,1,'')

SELECT @ColsWithNoNulls = STUFF((SELECT  distinct ',ISNULL(' + QUOTENAME(PRD_ValidDate) + ', 0) ' + QUOTENAME(PRD_ValidDate)
            FROM #Table
            GROUP BY PRD_ValidDate
        FOR XML PATH (''), Type).value('.','NVARCHAR(MAX)'),1,1,'')

SET @Query = 
'
SELECT cardtype as [Card Type],' + @ColsWithNoNulls + '  FROM
(
SELECT ISNULL(CAST(Cardtype AS VARCHAR(30)),''TOTAL'') CardType, ISNULL(SUM    (AllEntries),0) as AllEntries, PRD_ValidDate FROM #Table
GROUP BY cardtype,  prd_Validdate
WITH CUBE
 ) src
PIVOT
( SUM(AllEntries)
 For PRD_ValidDate IN ('+@Cols+')) piv
 ORDER BY CASE WHEN (CardType=''TOTAL'')THEN 1 ELSE 0 END, CardType'

Заранее спасибо!

1 Ответ

0 голосов
/ 27 октября 2018

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

        SELECT cardtype as [Card Type],' + @ColsWithNoNulls + '  FROM
        (SELECT ISNULL(CAST(Cardtype AS VARCHAR(30)),''TOTAL'') CardType, 
         ISNULL(SUM    (AllEntries),0) as AllEntries, PRD_ValidDate FROM #Table
        GROUP BY cardtype,  prd_Validdate
        WITH CUBE) src
        PIVOT
        ( SUM(AllEntries)
         For PRD_ValidDate IN ('+@Cols+')) piv
         UNION 
         select sum((SELECT ISNULL(CAST(Cardtype AS VARCHAR(30)),''TOTAL'')), 
 sum(ISNULL(SUM (AllEntries),0)) as AllEntries, days(PRD_ValidDate) FROM 
    SELECT cardtype as [Card Type],' + @ColsWithNoNulls + '  FROM
    (SELECT ISNULL(CAST(Cardtype AS VARCHAR(30)),''TOTAL'') CardType, 
     ISNULL(SUM    (AllEntries),0) as AllEntries, PRD_ValidDate FROM #Table
    GROUP BY cardtype,  prd_Validdate
    WITH CUBE) src
    PIVOT
    ( SUM(AllEntries)
     For PRD_ValidDate IN ('+@Cols+')) piv
...