Ошибка арифметического переполнения при преобразовании выражения в сообщение типа int в коде T-SQL - PullRequest
0 голосов
/ 02 мая 2019

У меня есть следующий код:

     SELECT 
            ehrprg.ReportName 
           ,ehrprg.AnnualGoalServiceMinutes
           ,COUNT(DISTINCT ct.[ClientFK]) AS [UnduplicatedClients]

    FROM 
           [WH].[Fact].[EHRClinicalTransaction] ct
    INNER JOIN [Dimension].EHRProgram ehrprg ON 
                           ct.ProgramFK = ehrprg.WHID

    WHERE
          ehrprg.AnnualGoalServiceMinutes > 0

    GROUP BY
            ehrprg.ReportName 
           ,ehrprg.AnnualGoalServiceMinutes 

    ORDER BY
           ReportName 

и результат:

enter image description here

Но мне нужно, чтобы был только один«SM NV» (вместо 2) и одна «SM REACH» (вместо 3) строк в столбце [ReportName] , суммируя [ServiceMinutes]

Когда я использую SUM (ehrprg.AnnualGoalServiceMinutes) , это дает мне ошибку « Арифметическое переполнение при преобразовании в тип данных int ».

Затем я попытался, SUM(CONVERT (BIGINT, ehrprg.AnnualGoalServiceMinutes)) , но с получением следующего:

enter image description here

По-прежнему не группируется (без суммирования AnnualGoalServiceMinutes)и дает некоторые значения, я не могу понять

Моя цель состоит в том, чтобы вместо -

        ReportName   AnnualGoalServiceMin
        SM NV        197885
        SM NV        348654

        SM REACH     40000 
        SM REACH     80000
        SM REACH     380000

Я ожидаю СУММУ AnnualGoalServiceMin:

       ReportName   AnnualGoalServiceMin
       SM NV        546539
       SN REACH     500000           

Пожалуйста, помогите

1 Ответ

0 голосов
/ 02 мая 2019

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

WITH cte AS (
    SELECT
        ehrprg.ReportName,
        ehrprg.AnnualGoalServiceMinutes,
        COUNT(DISTINCT ct.[ClientFK]) AS UnduplicatedClients
   FROM [WH].[Fact].[EHRClinicalTransaction] ct
   INNER JOIN [Dimension].EHRProgram ehrprg
        ON ct.ProgramFK = ehrprg.WHID
   WHERE ehrprg.AnnualGoalServiceMinutes > 0
   GROUP BY ehrprg.ReportName, ehrprg.AnnualGoalServiceMinutes
)

SELECT
    ReportName,
    SUM(AnnualGoalServiceMinutes) AS AnnualGoalServiceMinutes,
    SUM(UnduplicatedClients) AS UnduplicatedClients
FROM cte
GROUP BY
    ReportName;
...