求☆☆邹建☆☆详解这段代码,呵呵。确实好用,但是就是不明白。
--table1 --任务编码 --任务编码主键
--table2 --任务编码,人员编码 --没有主键,每个任务有不同的人员参与,级别不同,数量不定
--table3 --人员编码,人员类型 ,姓名 --0,1,2,3,4四个类型
declare @t1 table(任务编码 varchar(20),车辆编码 varchar(10))
insert into @t1 select '001 ', '001 '
union all select '002 ', '002 '
declare @t2 table(任务编码 varchar(20),人员编码 varchar(10))
insert into @t2 select '001 ', '00001 '
union all select '001 ', '00003 '
union all select '001 ', '00005 '
union all select '001 ', '00007 '
union all select '001 ', '00009 '
union all select '001 ', '00010 '
union all select '002 ', '00002 '
union all select '002 ', '00004 '
union all select '002 ', '00006 '
union all select '002 ', '00008 '
union all select '002 ', '00010 '
union all select '002 ', '00001 '
union all select '002 ', '00003 '
declare @t3 table(人员编码 varchar(10),人员类型 smallint,姓名 varchar(10))
insert into @t3 select '00001 ',0, 'TTT '
union all select '00002 ',0, 'YYY '
union all select '00003 ',1, 'YYY '
union all select '00004 ',1, 'YYY '
union all select '00005 ',2, 'AAA '
union all select '00006 ',3, 'CCC '
union all select '00007 ',4, 'XXX '
union all select '00008 ',2, 'SSS '
union all select '00009 ',3, 'SSS '
union all select '00010 ',4, 'SSS '
union all select '00011 ',2, 'SSS '
;WITH
TM AS(
SELECT DISTINCT
A.任务编码, A.车辆编码,
C.人员类型, C.姓名
FROM @t1 A, @t2 B, @t3 C
WHERE A.任务编码 = B.任务编码
AND B.人员编码 = C.人员编码
),
TP AS(
SELECT
A.*,
姓名 = STUFF(B.re.value( '(/r)[1] ', 'nvarchar(max) '), 1, 1, N ' ')
FROM(
SELECT DISTINCT
任务编码, 车辆编码, 人员类型
FROM TM
)A
OUTER APPLY(
SELECT re = (
SELECT v = 姓名 FROM TM r
WHERE 任务编码 = A.任务编码
AND 车辆编码 = A.车辆编码
AND 人员类型 = A.人员类型
FOR