【问题标题】:SQL Query - Help Getting sum of records in a GroupSQL 查询 - 帮助获取组中的记录总和
【发布时间】:2015-06-03 15:05:41
【问题描述】:

我有以下表格。

Program Table - 
        prog_ID, 
        prog_Name

Unit Table - 
        unit_ID, 
        unit_name, 
        prog_ID
        max-beds
        max-budgeted-beds
        max-unbudgeted-beds
        max-escalation-beds

Import_Data Table - 
        bed_ID, 
        unit_ID

Bed Table - 
        bed_ID, 
        bed_type_ID

Bed Type Table - 
        bed_type_ID, 
        bed_type

我正在尝试编写一个查询,该查询将为我提供每个程序中的总床位数。

例子

Program | Bed Count
-------------------
MED        30
REH        25
SUR        36

我有一个查询,它为我提供了每个单元的所有床位,但我想深入了解程序。出于某种原因,我只是对此一无所知。

提前感谢您的帮助!


附录

我正在尝试将以下内容确定为输出中的列标题:

Occupied Beds 
--Total Occupied Beds
(SUM(CASE WHEN Bed_Type.bed_type_description = 'Regular' THEN 1 ELSE 0 END)) As 'Total Occupied' 

Budgeted Beds
--OCCUPIED BUDGETED BEDS
(SUM WHEN < MAX_BUDGETED),(CASE WHEN (SUM (CASE WHEN Bed_Type.bed_type_description =     'Regular' THEN 1 ELSE 0 END)) < UNIT.unit_beds_max_budgeted THEN (SUM (CASE WHEN Bed_Type.bed_type_description = 'Regular' THEN 1 ELSE 0 END)) ELSE Unit.unit_beds_max_budgeted END) AS 'Occupied Budgeted Beds'

Unbudgeted Beds
--OCCUPIED UNBUDGETED BEDS
    , (CASE WHEN (SUM (CASE WHEN Bed_Type.bed_type_description = 'Regular' THEN 1 ELSE 0 END)) > UNIT.unit_beds_max_budgeted THEN Unit.unit_beds_max_unbudgeted + Unit.unit_beds_max_budgeted - (SUM (CASE WHEN Bed_Type.bed_type_description = 'Regular' THEN 1 ELSE 0 END)) ELSE 0 END) AS 'Occupied Unbudgeted Beds'

我在此处围绕对“Unit.unit_beds_max_budgeted”的引用出现错误,我不知道为什么。我在一个不同的查询中使用这个逻辑,但是这个输出给了我这样的每个单元:

Program  Unit  Occupied_Beds   Budgeted_Beds   Unbudgeted_Beds
---------------------------------------------------------------
MED      A2    44              42              2
MED      A3    34              32              2
CCC      B2    44              42              2
CCC      B3    34              32              2

但是,我想要的输出是将 MED 和 CCC 作为一行,并将值汇总(并排除单元名称)。

非常感谢任何帮助,这让我大吃一惊,我觉得这应该很容易,但我无法得到它。我是否缺少建立链接的必要字段?提前致谢。

【问题讨论】:

  • (a) 你不应该在代码中使用Bed_Type.bed_type_description,在代码中不要使用Bed_Type.bed_type. 属性作为控制元素。属性变化。仅使用密钥。 (b) bed_type_description 在您的表中不存在。 (c) 请格式化您的代码。
  • 啊,我明白你的意思了。就像使用“WHEN Bed_Type.Bed_Type_ID = 1”,而不是描述“常规”。谢谢,我会换的!。
  • (a) 是的。但是那里有一个类似的问题,在下一个增量中,因为 ID 列不是 Key,它们是物理记录指针。如果您摆脱 ID 并使用逻辑键,您的代码将与更改隔离,否则它会被粘在物理存储值上。 (d) 为什么要将两个逻辑行塞进一个。当您获得三个程序时会发生什么。
  • (e) 单位没有床(只是坐在那里),然后导入会告诉您预订了哪些床? (f) BedType 的值是什么? (g) 日期呢?

标签: sql sql-server database relational-database


【解决方案1】:

一系列连接将带您到达那里。除非您想了解更多信息,否则您无需一路加入 Bed,因为 Import_Data 上有 bed_id。

SELECT P.prog_Name AS 'Program', COUNT(I.bed_ID) AS BedCount
FROM Import_Data I
INNER JOIN Unit U
    ON I.unit_ID = U.unit_ID
INNER JOIN Program P
    ON U.prog_ID = P.prog_ID
GROUP BY P.prog_Name

如果你想按床型计数

SELECT BT.bed_type AS 'BedType', COUNT(I.bed_ID) AS BedCount
FROM Import_Data I
INNER JOIN Unit U
    ON I.unit_ID = U.unit_ID
INNER JOIN Program P
    ON U.prog_ID = P.prog_ID
INNER JOIN Bed B
    ON I.bed_ID = B.bed_ID
INNER JOIN Bed_Type BT
    ON B.bed_type_ID = BT.bed_type_ID 
GROUP BY BT.bed_type

【讨论】:

  • 感谢您的回复。这对于获得我的整体占用价值非常有用。我如何根据bed_type计算它?我试图使用我在另一个查询中使用过的行,但我收到一条错误消息:Column 'Unit.unit_beds_max_budgeted' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
  • 按床型添加计数。我建议您学习有关 SQL 的教程。这是一个基本的东西。
  • 谢谢,我可以做简单的连接。我认为它比这更复杂一些。我会继续研究它。
  • 部分问题出在我的 Select Statment 中。我的专栏主要是比较 Bed_Type 'Regular' 和当前使用的床位的计算结果。
【解决方案2】:
select p.prog_ID as Program, Count(*) as BedCount
from Program p
    inner join unit u on p.prog_ID = u.prog_ID
    inner join Import_Data d on u.unit_ID = d.unit_ID
    inner join Bed b on d.bed_ID = b.bed_ID
Group By p.prog_ID

不运行此测试您可能需要将 count(*) 更改为 count(b.bed_ID)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2021-03-17
    相关资源
    最近更新 更多