求一条同组标记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结尾
*/
[解决办法]
if object_id('T1','u') is not null
drop table T1
go
create table T1
(
组号 varchar(5),
序号 int,
名称 varchar(10),
规格 int
)
insert into T1 select '01',1,'X1',1 union all select '02',1,'X2',1 union all
select '01',2,'X3',1 union all select '02',2,'X4',1 union all
select '01',3,'X5',1 union all select '02',3,'X6',1 union all
select '03',1,'X7',1 union all select '03',2,'X8',1 union all
select '04',1,'X9',1 union all select '04',2,'X10',1 union all
select '04',3,'X11',1 union all select '04',4,'X12',1
select * from T1 order by 组号,序号

select t.*,标记 = (case row_number() over(partition by t.组号 order by t.序号,t.名称)
when 1 then '组起始' when a.counts then '组结尾' else '组中断' end)
from T1 as t
join (select 组号,counts = count(1) from T1 group by 组号) as a
on a.组号 = t.组号
