2016-10-06 7 views
1

2つのフィールドを含むテーブルがあります(わかりやすくするため)。最初のものはグループ化したいもの、もう1つはコンマ区切りのテキストフィールドとして表示したいものです。どうやってするの?sqlserverでgroup byで複合フィールドを作成する方法

だから私のデータは、このようなものです:

col 1   col2 
------   ------ 
Ashkan   s1 
Ashkan   s2 
Ashkan   s3 
Hasan   k1 
Hasan   k2 
Hasan   k3 
Hasan   kachal 

私はこの

をしたい
col1  count  combination 
------ ------  ------- 
Ashkan  3   s1, s2,s3 
Hasan  4   k1, k2,k3,kachal 

私は以下のようにして、グループを行うことができますが、組み合わせを行う方法?

select [col1],count(*) 
    FROM mytable 
    group by [col1] 
    order by count(*) 

答えて

3

あなたはこのためにFOR XML PATHを使用することができます。

select col1, count(*) , 
     STUFF((SELECT ',' + col2 
       FROM mytable AS t2 
       WHERE t2.col1 = t1.col1 
       FOR XML PATH('')), 1, 1, '') 
FROM mytable AS t1 
group by col1 
order by count(*) 
2

あなたは文字列を連結するFOR XML PATH('')を使用することができます。

WITH Tbl(col1, col2) AS(
    SELECT * FROM(VALUES 
     ('Ashkan', 's1'), 
     ('Ashkan', 's2'), 
     ('Ashkan', 's3'), 
     ('Hasan', 'k1'), 
     ('Hasan', 'k2'), 
     ('Hasan', 'k3'), 
     ('Hasan', 'kachal') 
    ) t(a,b) 
) 
SELECT 
    col1, 
    [count] = COUNT(*), 
    x.combination 
FROM Tbl t 
CROSS APPLY(
    SELECT STUFF((
     SELECT ', ' + col2 
     FROM Tbl 
     WHERE col1 = t.col1 
     FOR XML PATH('') 
    ), 1, 2, '') AS combination 
) x 
GROUP BY t.col1, x.combination; 
関連する問題