日期:2014-05-18  浏览次数:20451 次

求☆☆邹建☆☆详解这段代码,呵呵。确实好用,但是就是不明白。
--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