22,209
社区成员
发帖
与我相关
我的任务
分享
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([ID] int,[name] nvarchar(23))
Insert #A
select 1,N'刘德华' union all
select 2,N'张杰' union all
select 3,N'林俊杰'
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([ID] int,[AID] int,[SNAME] nvarchar(27),[Stime] nvarchar(27))
Insert #B
select 1,1,N'冰雨',N'1998-10' union all
select 2,1,N'爱你一万年',N'2000-08' union all
select 3,2,N'三生三世',N'2017-03' union all
select 4,1,N'我恨我痴心',N'1996-10' union all
select 5,2,N'这就是爱',N'2011-05' union all
select 6,3,N'小酒窝',N'2008-09' union all
select 7,2,N'逆战',N'2012-01' union all
select 8,3,N'醉赤壁',N'2008-10' union all
select 9,3,N'江南',N'2004-06' union all
select 10,2,N'给女儿的一封信',N'2018-05'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select AId,#A.Name'
SELECT @sql = @sql + ',max(case Stime when ''' + Stime
+ ''' then SNAME else null end)[' + Stime + ']'
FROM ( SELECT DISTINCT
Stime
FROM #B
) a
SET @sql = @sql
+ 'from #B join #A on #a.Id = Aid group by AId,#A.Name order by AId'
EXEC(@sql)
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([ID] int,[name] nvarchar(23))
Insert #A
select 1,N'刘德华' union all
select 2,N'张杰' union all
select 3,N'林俊杰'
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([ID] int,[AID] int,[SNAME] nvarchar(27),[Stime] nvarchar(27))
Insert #B
select 1,1,N'冰雨',N'1998-10' union all
select 2,1,N'爱你一万年',N'2000-08' union all
select 3,2,N'三生三世',N'2017-03' union all
select 4,1,N'我恨我痴心',N'1996-10' union all
select 5,2,N'这就是爱',N'2011-05' union all
select 6,3,N'小酒窝',N'2008-09' union all
select 7,2,N'逆战',N'2012-01' union all
select 8,3,N'醉赤壁',N'2008-10' union all
select 9,3,N'江南',N'2004-06' union all
select 10,2,N'给女儿的一封信',N'2018-05'
Go
--测试数据结束
DECLARE @sql VARCHAR(8000)
SET @sql = ';WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY AID ORDER BY Stime)rn from #B
)
select AId,#A.Name'
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY AID ORDER BY Stime)rn from #B
)
SELECT @sql = @sql + ',max(case rn when ' + RTRIM(rn)
+ ' then SNAME else null end)[SNAME' + RTRIM(rn) + ']'+ ',max(case rn when ' + RTRIM(rn)
+ ' then Stime else null end)[Stime' + RTRIM(rn) + ']'
FROM ( SELECT DISTINCT
cte.rn
FROM cte
) a
SET @sql = @sql
+ ' from cte join #A on #a.Id = Aid group by AId,#A.Name order by AId'
EXEC(@sql)