Sql 基于上一行自动添加行

Sql 基于上一行自动添加行,sql,Sql,我正试图通过我学校的班级了解房间使用情况。我使用了如下SQL语句: SELECT TOP (100) PERCENT Room, Subject, COUNT(Subject) AS Expr1 FROM dbo.Timetable GROUP BY Room, Subject ORDER BY t.Room 假设我在学校只有一个房间叫M13。此SQL语句可能会为我提供: Ro

我正试图通过我学校的班级了解房间使用情况。我使用了如下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
很明显,我想对学校的每个房间都这样做,但为了简单起见,我刚刚在这里展示了一个房间


我完全不确定这是否可行,也不知道如何实现,因此任何帮助都将非常有用。

如果您使用的是SQL Server,我想到的唯一解决方案是合并两个SELECT语句的结果,其中一个语句选择类的占用率,计算非占用率并合并结果的方法

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

下面是一个关于查询的例子

您使用的是什么样的SQL server(MySQL、MSSQL、Oracle、PostgresQL等)?毫无疑问,有人会想出一个真正难以理解的单一查询解决方案,但这个解决方案很好用。但有一个问题是,使用最高(100%)百分比有什么好处?没有它也能正常工作。它是否利用了执行计划的某些复杂性来获得更好的性能或其他什么?@Zec老实说,我从来没有使用过它,我现在只是在研究它,但如果OP在他的尝试中使用了它,我认为尽可能少地偏离他的解决方案会让他更好地理解我的问题。是的。很公平。那么,奥普,交易是什么?是的。生成的代码解释了这一点。还有,Radu,我在排序视图时使用过它,只是觉得在这种情况下它一定有一些神奇的特性。没有。没有Santa.@Barrelnc-如果这是在视图中,您需要注意,尽管Management Studio插入了
TOP(100)
ORDER BY
,并假装视图可以排序,但查询视图的实际结果可能是任意顺序,除非访问此视图的查询上有一个ORDER BY。