22,210
社区成员
发帖
与我相关
我的任务
分享
USE tempdb
GO
IF OBJECT_ID('a') IS NOT NULL DROP TABLE a
IF OBJECT_ID('b') IS NOT NULL DROP TABLE b
CREATE TABLE a([序号] int,[主管领导] VARCHAR(300))
CREATE TABLE b([序号] int,[姓名] NVARCHAR(300))
INSERT INTO a ([序号] ,[主管领导]) VALUES (1,'1,2,3')
INSERT INTO a ([序号] ,[主管领导]) VALUES (2,'2,4')
INSERT INTO b ([序号],[姓名]) VALUES (1,N'李一')
INSERT INTO b ([序号],[姓名]) VALUES (2,N'刘二')
INSERT INTO b ([序号],[姓名]) VALUES (3,N'张三')
INSERT INTO b ([序号],[姓名]) VALUES (4,N'李四')
SELECT a.[序号],a.[主管领导], stuff(
(
SELECT ','+b.[姓名]
FROM b
WHERE ','+a.[主管领导]+',' LIKE '%,'+CAST(b.[序号] AS varchar(50))+',%'
FOR XML PATH('')
) ,1,1,'') AS [主管领导姓名]
FROM a
/*
序号 主管领导 主管领导姓名
1 1,2,3 李一,刘二,张三
2 2,4 刘二,李四
*/
;with a(序号,主管领导) AS (
select 1,'1,2,3' union all
select 2,'2,4'
),b(序号,姓名) AS (
select 1,N'李一' union all
select 2,N'刘二' union all
select 3,N'张三' union all
select 4,N'李四'
)
select m.序号,stuff(c.names,1,1,'') as 主管领导姓名 from a as m
outer apply(
select ','+b.姓名 from a,b where charindex(','+ltrim(b.序号)+',',','+a.主管领导+',')>0 and a.序号=m.序号 for xml path('')
) c(names)
序号 主管领导姓名
1 1 李一,刘二,张三
2 2 刘二,李四
SELECT *
,主管领导姓名 = STUFF(( SELECT ',' + 姓名
FROM b
where PATINDEX('%,' + RTRIM(序号) + ',%',',' + a.主管领导 + ',')>0
ORDER BY PATINDEX('%,' + RTRIM(序号) + ',%',',' + a.主管领导 + ',') --加上排序不变(如:2,1,3)
FOR XML PATH('')), 1, 1,'')
FROM a
这样应该没问题