根据另一列中的排序顺序逻辑连接多行的列值

时间:2015-09-21 23:11:15

标签: sql sql-server

在SQL Server 2008上,我有以下结果

id  combo                  name   value
-----------------------------------------
1   var1 + var2            var1   123
1   var1 + var2            var2   456
2   var1 + var4 + var2     var1   789
2   var1 + var4 + var2     var2   432
2   var1 + var4 + var2     var4   600
3   var1 + var2 + var3     var1   654
3   var1 + var2 + var3     var2   987
3   var1 + var2 + var3     var3   654

我需要对列表进行处理,以便代替组合我将获得该组合的值。

id     values   
-----------------------------------------
1      123.456
2      789.600.432
3      654.987.654

修改:请检查组合列。这是关键值应如何合并的关键列。所以第二项是789.600.432而不是789.432.600

1 个答案:

答案 0 :(得分:3)

请尝试以下查询。它已根据您的问题进行了更新。

select distinct id,
stuff(
            (
                Select 
                     '.'+t1.[value]
                from tbl t1 
                    where t1.ID=t2.ID 
                    order by CHARINDEX(t1.name,t1.combo)
                for xml path('') 
            ),1,1,'') 
            as [values]
from tbl t2

演示 sql小提琴链接:http://sqlfiddle.com/#!3/ba4a1/12

说明:查询在外部查询中使用FOR XML PATH,使用组合字符串中的name位置,以正确的顺序获取每个id行的连接值。