T-SQL 代码中将表达式转换为数据类型 int 消息的算术溢出错误
Arithmetic overflow error converting expression to data type int message in T-SQL code
我有以下代码:
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
结果:
但我需要它在 [ReportName][=43= 中只有一个 'SM NV'(而不是 2)和一个 'SM REACH'(而不是 3)行] 列,总结 [ServiceMinutes]
当我使用 SUM(ehrprg.AnnualGoalServiceMinutes) 时,出现“Arithmetic overflow error converting to datatype int”错误。
然后,我尝试了,SUM(CONVERT(BIGINT, ehrprg.AnnualGoalServiceMinutes)),但得到以下结果:
还是没有分组(没有总结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
求求你帮忙
我不知道溢出错误的来源(根据所涉及的整数的大小,它不应该发生),但我认为你在这里需要的是第二级聚合:
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;
我有以下代码:
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
结果:
但我需要它在 [ReportName][=43= 中只有一个 'SM NV'(而不是 2)和一个 'SM REACH'(而不是 3)行] 列,总结 [ServiceMinutes]
当我使用 SUM(ehrprg.AnnualGoalServiceMinutes) 时,出现“Arithmetic overflow error converting to datatype int”错误。
然后,我尝试了,SUM(CONVERT(BIGINT, ehrprg.AnnualGoalServiceMinutes)),但得到以下结果:
还是没有分组(没有总结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
求求你帮忙
我不知道溢出错误的来源(根据所涉及的整数的大小,它不应该发生),但我认为你在这里需要的是第二级聚合:
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;