如表1工号 考勤时间
A001 8:00
A001 12:00
A001 13:00
A001 18:00
B001 8:00
B001 12:00
B001 13:00
B001 18:00如何处理会变成以下表2工号 考勤时间1 考勤时间2 考勤时间3 考勤时间4
A001 8:00 12:00 13:00 18:00
B001 8:00 12:00 13:00 18:00
A001 8:00
A001 12:00
A001 13:00
A001 18:00
B001 8:00
B001 12:00
B001 13:00
B001 18:00如何处理会变成以下表2工号 考勤时间1 考勤时间2 考勤时间3 考勤时间4
A001 8:00 12:00 13:00 18:00
B001 8:00 12:00 13:00 18:00
if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([工号] nvarchar(4),[考勤时间] Datetime)
Insert #T
select N'A001','8:00' union all
select N'A001','12:00' union all
select N'A001','13:00' union all
select N'A001','18:00' union all
select N'B001','8:00' union all
select N'B001','12:00' union all
select N'B001','13:00' union all
select N'B001','18:00'
GoDECLARE @s NVARCHAR(4000),@i NVARCHAR(3)Select TOP 1 @i=COUNT(*),@s='' from #T GROUP BY 工号 order by count(*) descWHILE @i>0
SELECT @s=N',[考勤'+@i+']=max(case when Row='+@i+N' then convert(varchar(5),考勤时间,108) end)'+@s,@i=@i-1
EXEC(N'SELECT 工号'+@s+N'
FROM (select *, row=row_number()over(partition by 工号 order by 工号)from #T) as a
GROUP BY 工号')
go
/*
工号 考勤1 考勤2 考勤3 考勤4
A001 08:00 12:00 13:00 18:00
B001 08:00 12:00 13:00 18:00
*/