实施CTE

sat*_*jit 3 sql sql-server sql-server-2008

我有下表:

create table #prd
(
  ver varchar(20),
  fam varchar(20),
  mm varchar(20),
)

insert into #prd values('dt','fam1','111')
insert into #prd values('dt','fam1','222')
insert into #prd values('mb','fam1','333')
insert into #prd values('mb','fam2','444')
Run Code Online (Sandbox Code Playgroud)

我需要使用CTE输出如下:

ver       family       MM
-------   ---------    ----------    
DT          fam1         111,222  
mb          fam1         333  
mb          fam2         444
Run Code Online (Sandbox Code Playgroud)

请帮忙!!

bob*_*obs 5

您不需要CTE.这是一个不使用CTE的解决方案

SELECT ver, fam,
    STUFF((
      SELECT  ', ' + mm
      FROM #prd AS prd
      WHERE p.ver = prd.ver
        AND p.fam = prd.fam
      ORDER BY mm
      FOR XML PATH('')
    ), 1, 2, '') AS MM
FROM #prd AS p
GROUP BY ver, fam
Run Code Online (Sandbox Code Playgroud)

如果你需要它作为CTE,试试这个

;WITH prd_CTE AS
    (
    SELECT ver, fam,
        STUFF((
          SELECT  ', ' + mm
          FROM #prd AS prd
          WHERE p.ver = prd.ver
            AND p.fam = prd.fam
          ORDER BY mm
          FOR XML PATH('')
        ), 1, 2, '') AS MM
    FROM #prd AS p
    GROUP BY ver, fam
    )
SELECT *
FROM prd_CTE
Run Code Online (Sandbox Code Playgroud)