Процент от общей строки в сводке SQL - PullRequest
0 голосов
/ 13 октября 2019

Моя проблема состоит из двух частей:

  1. ЧАСТЬ 1 РЕШЕНА. У меня есть сводный запрос SQL-сервера, который дает хорошие результаты, но не ИТОГО некоторые строки из-за значений NULL в одном из столбцов.
  2. Этот стержень должен быть% от общего стержня строки.

Запрос:

SELECT ISNULL([99211], 0),
       ISNULL([99212], 0),
       ISNULL([99213], 0),
       ISNULL([99214], 0),
       ISNULL([99215], 0),
       (ISNULL([99211], 0) + ISNULL([99212], 0) + ISNULL([99213], 0) + ISNULL([99214], 0) + ISNULL([99215], 0)) AS Total
FROM
(
    SELECT MONTH(c.ClaimServiceDate) AS MOS,
           t.[ProcedureCode],
           ISNULL(CONVERT(INT, t.NumberofCharges), 0) AS Charges
    FROM [EIPODS].[Athena].[claim] c
        INNER JOIN [EIPODS].[Athena].[transactions] t
            ON c.claimID = t.claimID
    WHERE c.ClaimServiceDate
    BETWEEN '2016-01-01' AND '2016-09-30'
) t
PIVOT
(
    SUM(Charges)
    FOR t.[ProcedureCode] IN ([99211], [99212], [99213], [99214], [99215])
) AS pivot_table
ORDER BY MOS;

РЕДАКТИРОВАТЬ: По предложению Алекса (ниже в комментарии) -Я заключил итог в строке 1 в ISNULL, и это исключило 0 в Итоге.

В настоящее время показывает:

MOS    99211    99212    TOTAL  
----
1      20      30    **50**  
2      0    40       **40**  

Необходимо показать:

MOS    99211    99212    TOTAL  
----
1      40%      60%     **100%**  
2      0%       100%    **100%**  

Данные:
Таблица транзакций: введите описание изображения здесь

Таблица требований:
введите описание изображения здесь

1 Ответ

0 голосов
/ 14 октября 2019

В процентах от общей строки я бы использовал внешний выбор (для удобства чтения), например, так:

SELECT t.[99211] / t.Total AS [99211],
       t.[99212] / t.Total AS [99212],
       t.[99213] / t.Total AS [99213],
       t.[99214] / t.Total AS [99214],
       t.[99215] / t.Total AS [99215],
       t.Total / t.Total
FROM
(
    SELECT pivot_table.MOS,
           ISNULL([99211], 0) AS [99211],
           ISNULL([99212], 0) AS [99212],
           ISNULL([99213], 0) AS [99213],
           ISNULL([99214], 0) AS [99214],
           ISNULL([99215], 0) AS [99215],
           (ISNULL([99211], 0) + ISNULL([99212], 0) + ISNULL([99213], 0) + ISNULL([99214], 0) + ISNULL([99215], 0)) AS Total
    FROM
    (
        SELECT MONTH(c.ClaimServiceDate) AS MOS,
               t.[ProcedureCode],
               ISNULL(CONVERT(INT, t.NumberofCharges), 0) AS Charges
        FROM [EIPODS].[Athena].[claim] c
            INNER JOIN [EIPODS].[Athena].[transactions] t
                ON c.claimID = t.claimID
        WHERE c.ClaimServiceDate
        BETWEEN '2016-01-01' AND '2016-09-30'
    ) t
    PIVOT
    (
        SUM(Charges)
        FOR t.[ProcedureCode] IN ([99211], [99212], [99213], [99214], [99215])
    ) AS pivot_table
) t
ORDER BY t.MOS;

Вам нужно будет отформатировать числа на основе ваших предпочтений, но это должно дать вам% / Total.

...