Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的子组计数_Sql_Sql Server 2005 - Fatal编程技术网

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