SQL Report Builder:VarChar 列中的 SUM 问题

SQL Report Builder: Issue with SUM in VarChar Column

我回来回答一个可能非常简单的问题,但(作为 SQL 新手)我似乎无法弄明白。

我基本上是 运行 为一家医院编写一份相当简单的报告。他们想要一份报告,其中详细说明每次从急诊部开出特定药物的处方,以及报告中列出已分配的单位总数的部分。最后一部分是我遇到的问题。

目前,我在 Report Builder 报告中添加了一个额外的列,表示“Qty_Dispensed_Total”,我希望它是总单位数 dispensed/prescribed,但它在每一行显示不同的数字,none 的数字是总数。

一个问题是所有字段都是 VarChar,但无论我尝试什么,我最终都会收到错误或不正确的“总计”。

这就是我正在使用的:

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 语句中添加了,因为没有它我无法将代码获取到 运行。

我确定我遗漏了一些简单的东西,但我无法确定。

仅适用于 clarification/TLDR:我希望 Qty_Dispensed_Total 字段是一个数字,表示所有 Qty_Dispensed 行的总计(总和)。

让我知道是否可以提供任何其他信息(或者您是否需要报告的屏幕截图)。

您得到的 Qty_Dispensed_Total 是该组的总计。

在您的情况下,群组是 Dispensed_DTTM, Qty_Dispensed, MRN, Visit_Number, Medication_Description, Department_Name

最好的方法是进行子查询而不是分组来获取总计。

如果您 post 创建 table T_SomeTable 的查询,我可以为您编写查询。

您可以使用 window 函数 来计算总计,只需添加 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
)

在这种情况下,总计行的所有列都将为空值。如果你想显示得更好一点,你可以使用 SELECT ISNULL(column, 'Grand Total')