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

合并符合条件的相邻若干条数据
{one,two}
{yes,no}
{hello,world}
第i  条数据第6个属性值如果是以上三组中某组的第一项,如yes
第i+1条数据第6个属性值如果是以上三组中相应组第二项,如no
第1-4个属性值相同,则把第i条数据和第i+1条合并为一条数据,规则如下:
将第i条数据的第5个属性值和第i+1条数据的第5个属性值合并为新数据的第5个属性
值,空格隔开
其它属性值取第i条数据的属性值
如果还有第i+2条和第i条数据与第i+1条数据和第i条数据有相同的性质
则合并三条数据,第5个属性值取三条数据第5个属性值的合并,空格隔开
例:
a1,b1,c1,d1,c1,yes
a1,b1,c1,d1,c2,no
合并为:
a1,b1,c1,d1,c1 c2,yes

又如:
a1,b1,c1,d1,c1,yes
a1,b1,c1,d1,c2,no
a1,b1,c1,d1,c3,no
合并为:
a1,b1,c1,d1,c1 c2 c3,yes

------解决方案--------------------
好复杂的逻辑,给你个合并的代码

with t as 
(
select 'a1' a ,'b1' b,'c1' c,'d1' d,'c1' c1,'yes' col
union all select 'a1','b1','c1','d1','c2','no'
union all select 'a1','b1','c1','d1','c3','no'
)
select a,b,c,d,(
select c1+' '
from t tb2
where tb1.a=tb2.a and tb1.b=tb2.b and tb1.c=tb2.c
and tb1.d=tb2.d
for xml path('') c1
)
from t tb1
group by a,b,c,d