SQL报表生成器:VarChar列中SUM的问题



我回来了,这可能是一个非常简单的问题,但是(作为一个SQL新手)我似乎不能弄清楚。

我基本上是在为医院写一份相当简单的报告。他们想要一份报告,详细说明每次急诊科开出的特定药物,并在报告中列出分配的总单位数量。最后一部分是我遇到麻烦的地方。

目前,我在报表生成器报告中添加了一个额外的列,表示&;qty_dispensed_total&;我希望它是分配/处方的总单位数,但它在每一行显示不同的数字,并且没有一个数字是总数。

一个问题是所有字段都是VarChar,但无论我尝试什么,我最终都会得到错误或不正确的&;total &;

这是我正在处理的:

SELECT Dispensed_DTTM, 
MRN, 
Visit_Number, 
Medication_Description, 
Qty_Dispensed,
SUM(CAST(Qty_Dispensed AS INT)) AS Qty_Dispensed_Total,
Department_Name 
FROM dbo.T_SomeTable
WHERE (
CAST([Dispensed_DTTM] AS DATE) BETWEEN '01/01/2020' AND '12/31/2020' AND
Medication_Description LIKE '%Trazodone 50%' AND
Department_Name LIKE '%Emergency%'
)
GROUP BY Dispensed_DTTM, Qty_Dispensed, MRN, Visit_Number, Medication_Description, Department_Name
ORDER BY Dispensed_DTTM;

我添加了GROUP BY语句,因为没有它我无法让代码运行。

我肯定我错过了一些简单的东西,但我不能指出来。

只是为了澄清/TLDR:我希望Qty_Dispensed_Total字段是一个单独的数字,表示所有Qty_Dispensed行的总和。

如果我能提供任何额外的信息(或者如果你需要报告的截图),请告诉我。

您可以使用窗口函数要计算总金额,只需添加OVER子句:

SUM(CAST(Qty_Dispensed AS INT)) OVER () AS Qty_Dispensed_Total,

你可以删除GROUP BY条款,我想。


另一个选择,如果您希望将总数作为新行而不是列,则使用GROUP BY ROLLUP(...GROUP BY GROUPING SETS(...:

GROUP BY GROUPING SETS (
(Dispensed_DTTM, Qty_Dispensed, MRN, Visit_Number, Medication_Description, Department_Name),
( )    --empty set, so grand total
)

在这种情况下,grand-total行的所有列都为空。如果你想更好地显示它,你可以使用SELECT ISNULL(column, 'Grand Total')

您得到的Qty_Dispensed_Total是该组的Total。

在您的例子中,组是Dispensed_DTTM, Qty_Dispensed, MRN, Visit_Number, Medication_Description, Department_Name

最好的方法是创建一个子查询来获取Total,而不是分组。

如果你发布查询来创建表T_SomeTable,我可以为你写查询。

最新更新