Sql两表查询 合并到一表

时间:2025-02-15 10:38:03

--测试数据

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,#'

;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

                    

          FROM      cte

        ) a

SET @sql = @sql

    ' from cte join #A on # = Aid group by AId,# order by  AId'

EXEC(@sql)