求一条同组标记SQL语句
T1
组号 序号 名称 规格
01 1 X1 1
02 1 X2 1
01 2 X3 1
02 2 X4 1
01 3 X5 1
02 3 X6 1
03 1 X7 1
03 2 X8 1
04 1 X9 1
04 2 X10 1
04 3 X11 1
04 4 X12 1
显示效果
组号 序号 名称 规格 标记
01 1 X1 1 A
01 2 X3 1 B
01 3 X5 1 A
02 1 X2 1 A
02 2 X4 1 B
02 3 X6 1 A
03 1 X7 1 A
03 2 X8 1 A
04 1 X9 1 A
04 2 X10 1 B
04 3 X11 1 B
04 4 X12 1 A
[解决办法]
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([组号] nvarchar(2),[序号] int,[名称] nvarchar(3),[规格] int)
Insert #T1
select N'01',1,N'X1',1 union all
select N'02',1,N'X2',1 union all
select N'01',2,N'X3',1 union all
select N'02',2,N'X4',1 union all
select N'01',3,N'X5',1 union all
select N'02',3,N'X6',1 union all
select N'03',1,N'X7',1 union all
select N'03',2,N'X8',1 union all
select N'04',1,N'X9',1 union all
select N'04',2,N'X10',1 union all
select N'04',3,N'X11',1 union all
select N'04',4,N'X12',1
Go
Select
a.*
,Flag=CASE ROW_NUMBER()over(PARTITION BY a.[组号] ORDER BY [序号],[名称]) WHEN 1 THEN '开始' WHEN b.con THEN '结尾' ELSE '中段' END
from #T1 AS a
INNER JOIN (SELECT [组号],con=COUNT(1) FROM #T1 GROUP BY [组号]) AS b ON a.[组号]=b.[组号]
/*
组号序号名称规格Flag
011X11开始
012X31中段
013X51结尾
021X21开始
022X41中段
023X61结尾
031X71开始
032X81结尾
041X91开始
042X101中段
043X111中段
044X121结尾
*/

