将多行连接成单行

时间:2013-06-18 03:36:22

标签: sql sql-server

SELECT     
   RESVID, VEHTYPE
FROM         
   (SELECT     
       dbo.T_VEH_VEHRESERVATION.RESVID,
       TABLEVEHICLE.VEHTYPE, TABLEVEHICLE.VEHREGID
    FROM          
       (SELECT     
            dbo.T_VEH_VEHCATEGORY.VEHBRANDNAME + N' ' + dbo.T_VEH_VEHCLASS.VEHCLASSNAME AS VEHTYPE, 
            dbo.T_VEH_VEHREGISTRATION.VEHREGID
        FROM          
            dbo.T_VEH_VEHCATEGORY 
        WHERE      
            (dbo.T_VEH_VEHREGISTRATION.DELIND = 0) 
       ) AS TABLEVEHICLE 
    INNER JOIN
       dbo.T_VEH_VEHRESERVATION ON TABLEVEHICLE.VEHREGID = dbo.T_VEH_VEHRESERVATION.VEHREGID )
    GROUP BY 
       dbo.T_VEH_VEHRESERVATION.RESVID   
   ) AS TABLERESV

enter image description here

我想将RESVID:33(重复行)连接成1。

这只是一个例子,当然我想要的是这个情况的每一个重复行都将得到解决。

我尝试了XML PATH功能,但根本不起作用,我不知道出了什么问题,如果对我的代码有任何帮助,我会很感激,并给我解释。

我渴望的结果:

RESVID   |  VEHTYPE
-------------------
  33     |  Proton Economic, Toyota Mid-size SUV

我的观点只有一张表

enter image description here

由于

3 个答案:

答案 0 :(得分:2)

试试这样....

Select Distinct  RESVID ,Stuff((Select ','+VEHTYPE from TabelName A where A.RESVID =B.RESVID 
 For Xml Path('')),1,1,'') as VEHTYPE from TabelName B

答案 1 :(得分:1)

尝试使用STUFF()

SELECT RESVID ,
    STUFF((
    SELECT ','+ VEHTYPE    
    FROM TABLERESV b    
    WHERE a.RESVID = b.RESVID 
    FOR XML PATH('')
    )
    ,1,1,'') AS VEHTYPE
FROM TABLERESV  a
GROUP BY a.RESVID 

答案 2 :(得分:1)

这是:


SELECT B.resvid, STUFF(
(SELECT ',' + A.vehtype
FROM TABLE_NAME A
WHERE A.resvid=B.resvid
FOR XML PATH('')),1,1,'') AS CSV
FROM TABLE_NAME B
GROUP BY B.resvid