【问题标题】:SQL Report Builder: Issue with SUM in VarChar ColumnSQL 报表生成器:VarChar 列中的 SUM 问题
【发布时间】:2021-01-26 23:41:58
【问题描述】:

我回到了一个可能很简单的问题,但(作为一个 SQL 新手)我似乎无法弄清楚。

我基本上是在为医院运行一份相当简单的报告。他们想要一份报告,详细说明每次从紧急部门开出特定药物的情况,以及报告中列出已分配单位总数的部分。最后一部分是我遇到的麻烦。

目前,我在报告生成器报告中添加了一个额外的列,表示“Qty_Dispensed_Total”,我希望它是分配/规定的 TOTAL 单位数,但它显示的是不同的数字每一行,没有一个数字是总数。

一个问题是所有字段都是 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 语句中添加了因为没有它我无法让代码运行。

我确定我错过了一些简单的东西,但我不能指望它。

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

如果我可以提供任何其他信息(或者如果您需要报告的屏幕截图),请告诉我。

【问题讨论】:

  • 我觉得你有点迷失了,让事情变得比他们需要的更复杂。我建议编辑您的问题以准确显示您在报告中需要哪些数据(您需要显示哪些详细信息,您需要进行哪些聚合等)。查询同时包含详细信息和聚合数据是不正常的做法,我(目前)无法理解您为什么需要它。回归基础,我相信答案很简单。

标签: sql sql-server reporting-services report


【解决方案1】:

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

【讨论】:

  • 顶级解决方案对我来说就像一个魅力!如果没有您的评论,我永远不会想到使用 OVER(),所以谢谢!你能解释一下为什么需要 OVER() 来让它工作吗?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多