WITH a1 (msg) AS 
(
SELECT '11,22,33,44' UNION ALL
SELECT '33,44,55,66'
)
,a2 AS
(
SELECT DISTINCT b.msg
FROM
(SELECT msg=CONVERT(XML, '<root><v>'+replace(RTRIM(LTRIM(msg)),',','</v><v>')+'</v></root>') FROM a1) a
OUTER APPLY
(SELECT msg = C.v.value('.','NVARCHAR(MAX)') FROM a.msg.nodes('/root/v') C(v)) b
)
SELECT msg=STUFF((SELECT ','+msg FROM a2 FOR XML PATH('')),1,1,'')

解决方案 »

  1.   

    先拆分再合并 拆分以后先DISTINCT一下。
      

  2.   

    我倒是想知道,这种拆分合并,是在sql里面实现还是在客户端程序里面实现好?如果太多这类的拆分合并,在SQL上实现,会不会耗去很多服务器资源啊?
      

  3.   


    能不能帮忙优化一下比如现在结果是 11,22,33,33,44,44,55,66结果变成:11,22,33,44,55,66怎么做呢?
    WITH a1 (msg) AS 
    (
    SELECT '11,22,33,33,44,44,55,66'
    )
    ,a2 AS
    (
    SELECT DISTINCT b.msg
    FROM
    (SELECT msg=CONVERT(XML, '<root><v>'+replace(RTRIM(LTRIM(msg)),',','</v><v>')+'</v></root>') FROM a1) a
    OUTER APPLY
    (SELECT msg = C.v.value('.','NVARCHAR(MAX)') FROM a.msg.nodes('/root/v') C(v)) b
    )
    SELECT msg=STUFF((SELECT ','+msg FROM a2 FOR XML PATH('')),1,1,'')
      

  4.   

     select * from (select distinct  qty  from (select qty from(select top 1 * from test5 order by N1)as t1
     unpivot( qty for n in (N1,N2,N3,N4) )as p1 
     union all
     select qty from 
     (select top 1 * from TEST5 order by N1 desc) as t2
      unpivot( qty for n in (N1,N2,N3,N4) )as p2) as t) as t
      pivot (sum(qty) for qty in ([11],[22],[33],[44],[55],[66])) as p