日期:2014-05-17  浏览次数:20648 次

SQL对多个列分别进行合并的操作,100分送上谢谢
操作了一个查询,大概联合了20张表左右.现在需要对一些数据做一些处理,因为部分不相同的列,需要合并在一起,并追加分隔号


这是查询出来的数据段


其中,标注的Order_No,Insp_type,Style_Name,Type_Desc都可能存在不相同的数据,所以,需要把这些列都合并起来,加上分割号,大概如下图效果

这是合并之后的数据


合并的代码如下

SELECT B.Agreement_Transaction_Id,B.Agreement_Transaction_No,B.Customer_Name,LEFT(AgreementList,LEN(AgreementList)-1) as Order_No FROM (
 SELECT Agreement_Transaction_Id,Agreement_Transaction_No,Customer_Name,
      (SELECT Order_No+';' FROM V_Agreement_Transaction_Invoice WHERE Agreement_Transaction_Id=A.Agreement_Transaction_Id FOR XML PATH('')) AS AgreementList
FROM V_Agreement_Transaction_Invoice A 
GROUP BY Agreement_Transaction_Id,Agreement_Transaction_No,Customer_Name)B 


在这一块有一点疑问,我现在要对第二字段进行合并的时候要如何操作?

------解决方案--------------------
1. 字符串合并的话,只要将列都转换成字符类型,然后把要合并的列直接用 +';' 连接就行。
2. 不知道你为什么要合并,如果还有外部程序,建议在外部程序中合并,因为反操作麻烦很多。
------解决方案--------------------
合并例子:
--2005
create table ym
(col1 int, col2 int, col3 varchar(3))

insert into ym
select 1, 1, 'A' union all
select 1, 1, 'B' union all
select 1, 2, 'C' union all
select 1, 3, 'D' union all
select 1, 3, 'E'


select a.col1,a.col2,
stuff((select ','+col3 from ym b 
       where b.col1=a.col1 and b.col2=a.col2 
       for xml path('')),1,1,'') 'col3'
from ym a
group by  a.col1,a.col2
------解决方案--------------------
用版主的简洁明了许多
------解决方案--------------------
你上面写的就是合并,挺好的,其他的字段也是一样合并的,都是通过xml来合并
------解决方案--------------------
这样就行:

SELECT Agreement_Transaction_Id,
       Agreement_Transaction_No,
       Customer_Name,
       stuff((SELECT distinct ';'+Order_No FROM V_Agreement_Transaction_Invoice 
               WHERE Agreement_Transaction_Id=A.Agreement_Transaction_Id