求个SQL
本帖最后由 duwei1990 于 2014-03-15 10:45:05 编辑
表中记录:
GroupName NO Score
GroupA 1 50
GroupA 2 100
GroupA 9 150
GroupA 3 200
GroupA 4 150
GroupA 8 300
GroupA 12 200
GroupB 13 300
GroupB 1 300
运行结果:
GroupName Start End SUM(Score)
GroupA 1 4 500
GroupA 8 9 450
GroupA 12 12 200
GroupB 1 1 300
GroupB 13 13 300
创建表结构:
CREATE TABLE [dbo].[Test](
[GroupName] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[NO] [int] NULL,
[Score] [int] NULL
) ON [PRIMARY]
准备数据:
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',1,50)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',2,100)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',9,150)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',3,200)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',4,150)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',8,300)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupA',12,200)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupB',13,300)
INSERT INTO [Tabc].[dbo].[Test]([GroupName],[NO],[Score]) VALUES('GroupB',1,300)
------解决方案--------------------
其实这个代码最关键的就是求groupname相同的时候的,no的连续范围,
之所以在group by groupname,NO-rownum 这里的rownum是按照groupname分组,然后按照no排序,形成一个序号:1,2,3,4,5,6,7
这里的groupA一共有7条记录,所以上面是1-7,然