SQL中的子组计数
我有一个如下所示的查询:SQL中的子组计数,sql,sql-server-2005,Sql,Sql Server 2005,我有一个如下所示的查询: select c.[Name], c.Description, c.ID, cd.StartDateTime from Classroom.dbo.Class as c left join Classroom.dbo.Course as co on co.ID = c.CourseID left join Classroom.dbo.Classdate as cd on cd.ClassID =
select
c.[Name],
c.Description,
c.ID,
cd.StartDateTime
from
Classroom.dbo.Class as c
left join
Classroom.dbo.Course as co
on
co.ID = c.CourseID
left join
Classroom.dbo.Classdate as cd
on
cd.ClassID = c.ID
where
co.PublicIndicator = 1
这个查询只是给了我一个类列表以及它们发生的日期。这种关系是:
- 一门课程可以有很多课
- 一个班级可以有一个课程和多个上课日期
- 一个班级日期只能有一个班级
Test test 1 2009-08-19 05:00:00 1
Test test 1 2009-08-20 05:00:00 2
Test a 2 2009-10-22 08:00:00 1
Test a 3 2009-10-30 07:00:00 1
Test a 5 2009-10-21 11:00:00 1
其中最后一列是我想看到的额外列,表示在这个场景中,第二行是这个类的第二天
想法?OVER子句应该给你想要的东西。从
您需要按
cd.startdatetime
订购,而不是c.id
,因为c.id
是相同的。您只能使用OVER和排名函数,比如ROW_NUMBER()…这个“分区依据”很漂亮,但不知道它的存在。谢谢
SELECT c.[Name], c.Description, c.ID, cd.StartDateTime,
ROW_NUMBER() OVER(PARTITION BY c.Id Order BY cd.StartDateTime)
FROM Classroom.dbo.Class as c
LEFT JOIN Classroom.dbo.Course as co
ON co.ID = c.CourseID
LEFT JOIN Classroom.dbo.Classdate as cd
ON cd.ClassID = c.ID
WHERE co.PublicIndicator = 1