【问题标题】:Concat SQL result连接 SQL 结果
【发布时间】:2013-01-17 05:08:24
【问题描述】:

我对 SQL 很陌生,我正在使用 MS Access 的 ListBox 组件,它需要一个查询来显示数据。 以下是进行查询所涉及的表:

表:块 +----+--------+ |身份证 | B_姓名 | +----+--------+ | 1 |块F | | 2 |块E | . . . 表:房间 +----+------+--------+--------+-----+---------+---- --+--------+ |身份证 | B_ID | R_名称 |地板 |帕克斯 |翼翼 |比特币_R |男 | +----+------+--------+--------+-----+---------+---- --+--------+ | 1 | 1 |房间 1 | 2 | 10 |真的 |真的 |真的 | | 2 | 1 |房间 2 | 2 | 10 |真的 |真的 |真的 | | 3 | 2 |房间 1 | 1 | 10 |真的 |错误 |错误| . . .

其中 B_ID 是显示一对多关系的块的外键 在街区和房间之间,PAX 是最大的空缺数量。

表:用户组 +----+------+--------+------------+ |身份证 | R_ID |集团 |住户 | +----+------+--------+------------+ | 1 | 1 |平方 1 | 4 | | 2 | 1 |平方 2 | 5 | . . .

其中 R_ID 是显示一对多关系的房间的外键 在房间和用户组之间

用户可以根据列中的条件过滤房间 楼层、E_Wing、BTC_R、MALE 和 B_ID。

我的问题是如何根据过滤器显示所有房间 条件和结果表如下:

*例如过滤条件为B_ID = 1*时

表:查询结果 +--------+--------------+ | R_名称 |复杂查询 | +--------+--------------+ |房间 1 | 0 / 10 | |房间 2 | 9 / 10 | . . . 复杂查询:“TOTAL OCCUPANTS / PAX”

到目前为止我取得的进展是单独的查询

选择总和(用户组。占用者) 来自用户组 WHERE UserGroups.R_ID = DESIRED_ID 选择房间.PAX 从房间 WHERE Rooms.ID = DESIRED_ID
  1. 如何遍历每个匹配过滤条件的房间 ID 的查询
  2. 如何将两个查询合并为一个查询
  3. 如何将值作为“OCCUPANTS / PAX”连接到单个列中

感谢任何帮助。

【问题讨论】:

    标签: sql ms-access subquery concatenation


    【解决方案1】:

    如果我正确理解您的问题,您需要使用 LEFT JOIN、SUM 和 GROUP BY。这是一些未经测试的代码——我认为您需要在 Access 中的联接周围加上括号:

    SELECT R.R_Name, SUM(UG.Occupants) / R.Pax as PercentageOfRoomOccupied
    FROM Rooms R
    LEFT JOIN UserGroups UG ON R.Id = UG.R_Id
    WHERE R.B_ID = 1
    GROUP BY R.R_Name, R.Pax
    

    祝你好运。

    【讨论】:

    • 嘿,太棒了,非常感谢!它完美无缺!但我在格式化显示时仍然遇到一些问题。当房间中没有居住者时,列表框最终显示空白而不是 0。此外,该列还假设显示连接的居住者字符串 + ' / ' + pax。我试过:SUM(UG.Occupants) + ' / ' + R.PAX 但它只显示空白
    • 很高兴它成功了。要将值连接成一个字符串,您应该能够使用“&”——类似于 SUM(UG.Occupants) & "/" & R.Pax。将 ISNULL 函数包裹在 UG.Occupants 周围以返回 0 -- SUM(ISNULL(UG.Occupants,0))。未经测试,但应该接近。祝你好运。
    • 谢谢,使用 Nz() 设法让它正确显示。即使在我经历了所有教程之后,我仍然不确定是否使用左连接,因为我需要进行类似的查询,但这次是每个块的总数:结果:|block F| 103 / 120| |块 E| 99 / 120|它基本上比上一个查询高出另一个级别。每个街区的每个房间的住户总数。我尝试嵌套多个左连接,但效果不佳。
    【解决方案2】:

    您还可以对您的 ComplexQuery 列使用串联:

    CONCAT(ISNULL(SUM(UG.Occupants, 0), ' / ', R.Pax)) as ComplexQuery

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 2012-08-15
      • 2010-11-23
      • 2013-04-22
      • 2020-06-19
      • 1970-01-01
      相关资源
      最近更新 更多