【问题标题】:SQL: table with multiple colums from one tableSQL:一张表中包含多列的表
【发布时间】:2021-12-22 08:38:23
【问题描述】:

我有包含以下列的 ROOMS 表:ROOM_NO、HSTART、HEND、PPL_Q、CHAIR_Q

我正在尝试通过以下方式实现表格:

HSTART, HEND, 
PPL_Q (WITH WHERE ROOM_NO = 7 CONDITION),
PPL_Q (WITH WHERE ROOM_NO = 12 CONDITION),
PPL_Q (WITH SUM OF WHERE ROOM_NO IN 7,12 CONDITION), 
CHAIR_Q (WITH WHERE ROOM_NO = 7 CONDITION), 
CHAIR_Q (WITH WHERE ROOM_NO = 12 CONDITION), 
CHAIR_Q (WITH SUM OF WHERE ROOM_NO IN 7,12 CONDITION), 
PPL_PER_CHAIR (WITH SUM OF PPL/ SUM OF CHAIR)

表格使用来自图像的数据进行传播。最后,我试图从图像中获得第二个表格。

我尝试了很多查询,但我无法找到正确的方法。像这样的查询:

select HSTART, HEND, CHAIR_Q
from ROOMS
where ROOM_NO in (7,12)

这不会返回任何数据,我无法继续执行任何步骤来实现我的目标。

tables mockup

【问题讨论】:

  • 您应该提供示例数据和所需的输出以开始(不是图片 - 人们通常不关心图片)。
  • 顺便说一句,你的定义和你的图片不匹配,检查一下。
  • 感谢您的建议,我会在此门户的任何进一步贡献中注意到这一点。

标签: sql database join where-clause qsqlquery


【解决方案1】:

您的数据似乎大部分是静态的,您可以这样做:

SELECT
    t1.hstart
  , t1.hend
  , t1.chair_q                                                              AS Chair_QR7
  , t2.chair_q                                                              AS Chair_QR12
  , t1.chair_q+t2.chair_q+t3.chair_q                                        AS Chair_QTotal
  , t1.ppl_q                                                                AS PPL_QR7
  , t2.ppl_q                                                                AS PPL_QR12
  , t1.ppl_q+t2.ppl_q+t3.ppl_q                                              AS PPL_TOTAL
  , (t1.ppl_q+t2.ppl_q+t3.ppl_q)* 100.0 /(t1.chair_q+t2.chair_q+t3.chair_q) AS PPL_PER_CHAIR
FROM(SELECT room_no, hstart, hend, chair_q, ppl_q FROM tableName WHERE room_no=7)            t1
    INNER JOIN(SELECT room_no, hstart, hend, chair_q, ppl_q FROM tableName WHERE room_no=12) t2 ON t2.hstart=t1.hstart
                                                                                            AND t2.hend=t1.hend
    INNER JOIN(SELECT room_no, hstart, hend, chair_q, ppl_q FROM tableName WHERE room_no=14) t3 ON t3.hstart=t1.hstart
                                                                                            AND t3.hend=t1.hend;

DBFiddle demo 在这里。虽然演示是针对 SQL 服务器的,但它几乎适用于任何 SQL 后端。

编辑:对于总计,您只需使用 SUM()。即:

DBFiddle demo with totals

PS:总百分比是 98.0% 而不是 98.71%。我不知道你是怎么找到 98.71 的。

【讨论】:

  • 关于数据类型你是对的,它是静态的。解决方案它对我有用,部分。仍然必须在列的末尾计算每列的总数(总和) - 单独计算不是问题,但仍然不知道如何将其放入此查询中。
  • @dwembe_xl,对于总计,您可以简单地使用 SUM()。无论如何,我在编辑中添加了示例。
猜你喜欢
  • 2016-08-12
  • 2016-10-18
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
相关资源
最近更新 更多