2017-09-13 14 views
1

我有值转换相交成两个逗号分隔值

letter number 
A  1 
A  2 
A  3 
B  1 
B  2 

两列我想两个聚合,逗号分隔的,代表着不同的组letternumber的交点的值。

e.g

letters numbers 
A,B  1,2 
A  3 
+0

您是否尝试过的查询但你可以与我们分享级联的number栏目组? –

+2

在这里检查你的答案 - https://stackoverflow.com/questions/12671117/comma-separated-values-with-sql-query – Rojelo

+2

@Emil如果你的输入包含C和2的更多行,你期望什么结果?或者第一列总是只有两个不同的值? – sepupic

回答

2

我所做的是,首先由number列串连的letter列组。然后给出一个由连字母组成的行号分区,并按number排序。然后再由串联

查询

;with cte as(
    select * 
    from (
     select [number], stuff((
       select ', ' + [letter] 
       from [your_table_name] 
       where ([number] = t.[number]) 
       for xml path('') 
      ) 
      , 1, 2, '' 
     ) as letters 
     from [your_table_name] t 
     group by [number] 
    )t2 
) 
select [letters], stuff((
     select ', ' + cast(number as varchar(100)) 
     from cte 
     where ([letters] = t.[letters]) 
     for xml path('') 
    ) 
    , 1, 2, '' 
) as [numbers] 
from cte t 
group by [letters]; 

Find a demo here