1

我正在尝试按学校的班级获取有关房间使用情况的信息。我使用了如下 SQL 语句:

SELECT TOP (100) PERCENT Room,
                         Subject,
                         COUNT(Subject) AS Expr1
FROM dbo.Timetable
GROUP BY Room,
         Subject
ORDER BY t.Room

假设我在学校只有一个房间叫M13。这个 SQL 语句可能会给我:

Room    Subject    Expr1  
M13     English    7  
M13     Maths      41

如您所见,这个房间的总使用量是每个时间表周期 48 节课。如果每个时间表周期的总最大值为 60 个周期(每天 6 个周期 x 一个周期 10 天),我如何在每个房间的末尾自动添加一行,显示该房间未使用的周期数,例如在上面两行之后的行:

Room    Subject    Expr1  
M13     English    7  
M13     Maths      41
M13     Not Used   12

显然,我想对学校的每个房间都做同样的事情,但为了简单起见,我在这里只展示了 1 个房间。

我完全不确定这是否可能或如何完成,所以任何帮助都会很棒。

4

1 回答 1

2

如果您使用的是 SQL Server,我想到的唯一解决方案是将两个 SELECT 语句的结果进行 UNION,一个用于选择类的占用率,另一个用于计算非占用率和并集结果。

SELECT TOP (100) PERCENT Room,
    Subject,
    COUNT(Subject) AS Expr1
FROM dbo.Timetable
GROUP BY Room,
    Subject

UNION ALL

SELECT TOP (100) PERCENT Room, 
    'Not Used',
    60 - COUNT(Subject) AS Expr1
FROM dbo.Timetable
GROUP BY Room

ORDER BY t.Room

这是一个带有查询的SQLFiddle

于 2013-07-17T05:48:30.730 回答