2017-02-07 1 views
1

열의 csv를 가져와야하지만 나머지 열의 최소값 (또는 그룹에 대해 동일하므로 모든 값)을 가져와야합니다. 예로서;TSQL-csv가 나머지 열이 아닌 경우

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] 
관련 문제