需要在Sql查询上输出

时间:2016-10-18 18:09:52

标签: sql-server

我有一个Sql表:

PLAN_CD PLAN_NM CLASS
D01501  DENTAL  AA
D01501  DENTAL  AB
D01501  DENTAL  AC
V01501  VISION  AA
V01501  VISION  AB

输出应为:

PLAN_CD PLAN_NM
D01501  DENTAL,AA,AB,AC
V01501  VISION,AA,AB

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

在MSSQL 2005及更高版本中,你可以这样做:

select * into #data 
from (
    select 'D01501' as PLAN_CD, 'DENTAL' as PLAN_NM, 'AA' as CLASS union
    select 'D01501', 'DENTAL', 'AB' union
    select 'D01501', 'DENTAL', 'AC' union
    select 'V01501', 'VISION', 'AA' union
    select 'V01501', 'VISION', 'AB'
) x


select R.PLAN_CD, PLAN_NM = R.PLAN_NM + ',' + 
STUFF((
    SELECT ',' + [CLASS] 
    FROM #data 
    WHERE (PLAN_CD = R.PLAN_CD and PLAN_NM = R.PLAN_NM) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,1,'')

from
#data R
group by R.PLAN_CD, R.PLAN_NM

这将在PLAN_CD和PLAN_NM字段上分组,并将选择的CLASS字段与子查询连接起来。使用FOR XML构造完成连接。