SQL将重复列合并为1

时间:2016-11-21 17:29:30

标签: sql sql-server

我有这个查询

select im_Call,IM_DR
from cadw.tiburon.inmast m
where IM_DATE < Convert(date,GETDATE()) AND IM_DATE >= DATEADD(DD, - 4,Convert(date,GETDATE()))

返回与此类似的结果

enter image description here

我需要获取黄色突出显示的记录,这样我得到的结果将返回带有im_Call编号的1行,IM_DR列显示两个突出显示的记录为1行,有2列,如下所示

im_Call     IM_DR
163220023   160104238, 160104238

2 个答案:

答案 0 :(得分:1)

也许这可以帮助

  

编辑 - 添加了CTE以保持原始查询的范围

 ;with cte as (
    Select im_Call,IM_DR
    from cadw.tiburon.inmast m
    where IM_DATE < Convert(date,GETDATE()) AND IM_DATE >= DATEADD(DD, - 4,Convert(date,GETDATE()))
) 
 Select IM_Call
       ,IM_DR = (Select Stuff((Select Distinct ',' +cast(IM_DR as varchar(25)) From cte Where IM_Call=A.IM_Call For XML Path ('')),1,1,'') )
 From (Select Distinct IM_Call From cte) A

答案 1 :(得分:1)

您需要使用For xml path和Stuff函数进行操作。

 ;with cte as (

   select im_Call,IM_DR
   from cadw.tiburon.inmast m
   where IM_DATE < Convert(date,GETDATE()) AND
    IM_DATE >=   
    DATEADD(DD,-4,Convert(date,GETDATE()))

  )
  Select C1.im_Call , (Select stuff((select
    distinct  ','+cast(C2.IM_DR as varchar(20)) from cte C2 
  where c2.Im_call= C1.Im_call for xml path('') ),1,1,''))
  as  IM_DR
  from CTE C1