2017-02-07 8 views
1

列からcsvを取得する必要がありますが、残りの列からの最小値(またはグループのために同じ値なので任意の値)を取得する必要があります。一例として、列のTSQL- csvと残りの部分はありません

Iは、次の表を持っている:

COL1  COL2  COL3  COL4 
------------------------------------------ 
ABC   10   35   GROUP1 
AQW   10   35   GROUP1 
VBN   10   35   GROUP1 
HJK   10   35   GROUP1 
DFV   30   25   GROUP2 
HYT   30   25   GROUP2 
DET   30   25   GROUP2 


And I want the following result: 

COL1     COL2  COL3  COL4 
-------------------------------------------------------- 
ABC,AQW,VBN,HJK   10   35   GROUP1 
DFV,HYT,DET    30   25   GROUP2 

私は複数のグループを有するされるように動作しない(Concatenating Column Values into a Comma-Separated List)同様のシナリオと可変ケース連結を使用して溶液を見ました。私はそれをする方法を考えることができません。方法を提案できますか?

答えて

2

サンプルデータ

DECLARE @Table1 TABLE 
    (COL1 varchar(3), COL2 int, COL3 int, COL4 varchar(6)) 
; 

INSERT INTO @Table1 
    (COL1, COL2, COL3, COL4) 
VALUES 
    ('ABC', 10, 35, 'GROUP1'), 
    ('AQW', 10, 35, 'GROUP1'), 
    ('VBN', 10, 35, 'GROUP1'), 
    ('HJK', 10, 35, 'GROUP1'), 
    ('DFV', 30, 25, 'GROUP2'), 
    ('HYT', 30, 25, 'GROUP2'), 
    ('DET', 30, 25, 'GROUP2') 
; 

スクリプト

SELECT COL1 = STUFF(
      (SELECT ',' + COL1 
       FROM @Table1 t1 
       WHERE t1.COL2 = t2.COL2 
       FOR XML PATH ('')) 
      , 1, 1, ''),COL2, COL3, COL4 from @Table1 t2 
group by COL2, COL3, COL4; 
+0

@man_luck歓迎 – mohan111

2

あなたはこのように、サブクエリでそれを行うことができます。

は(私たちを保存します将来の質問では、このステップをください

DECLARE @T AS TABLE 
(
    COL1 char(3), 
    COL2 int, 
    COL3 int, 
    COL4 char(6) 
) 

INSERT INTO @T VALUES 
('ABC', 10, 35, 'GROUP1'), 
('AQW', 10, 35, 'GROUP1'), 
('VBN', 10, 35, 'GROUP1'), 
('HJK', 10, 35, 'GROUP1'), 
('DFV', 30, 25, 'GROUP2'), 
('HYT', 30, 25, 'GROUP2'), 
('DET', 30, 25, 'GROUP2') 

クエリをサンプルテーブルを作成し、移入:

SELECT DISTINCT 
     STUFF(
     (
      SELECT ',' + COL1 
      FROM @T 
      WHERE COL2 = t.COL2 
      AND COL3 = t.COL3 
      AND COL4 = t.COL4 
      FOR XML PATH('') 
     ) 
     , 1, 1, '') As COL1, 
     COL2, 
     COL3, 
     COL4 
FROM @T t 

結果:

COL1    COL2 COL3 COL4 
ABC,AQW,VBN,HJK  10  35  GROUP1 
DFV,HYT,DET   30  25  GROUP2 
2

STUFFGROUP BYを使用してください。

クエリ

SELECT STUFF((SELECT ',' + [COL1] 
FROM [your_table_name] 
WHERE ([COL2] = t.[COL2] AND [COL3] = t.[COL3] AND [COL4] = t.[COL4]) 
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)') 
    ,1,1,'') AS COL1, [COL2], [COL3], [COL4] 
FROM [your_table_name] t 
GROUP BY [COL2], [COL3], [COL4] 
関連する問題