문제

나는 다음과 같은 것처럼 보이는 SQL 레코드 세트에서 합쳐 지거나 피벗하는 방법을 알아내는 데 어려움을 겪고 있습니다.

ID      VALUE       GROUP
3       John        18
4       Smith       18
5       Microsoft   18
3       Randy       21
4       Davis       21
5       IBM     21
etc

그리고 나는 이런 식으로 형식을 원합니다

NEWVALUE                GROUP
Smith, John (Microsft)      18
Davis, Randy (IBM)          21  

제안과 도움에 감사드립니다!

도움이 되었습니까?

해결책

이것이 내가 한 일입니다.

DECLARE @t table (id int, value VARCHAR(20), grupo int)
INSERT @T VALUES (3, 'John', 18)
INSERT @T VALUES (4, 'Smith', 18)
INSERT @T VALUES (5, 'Microsoft', 18)
INSERT @T VALUES (3, 'Randy', 21)
INSERT @T VALUES (4, 'Davis', 21)
INSERT @T VALUES (5, 'IBM', 21)


SELECT grupo, (SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 4) + ', ' + 
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 3) + ' (' +
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 5) + ')'
FROM @t t 
GROUP BY grupo

다른 팁

SELECT  LEFT(gvalue, LEN(gvalue) - 1) AS newvalue, _group
FROM    (
        SELECT  DISTINCT _group
        FROM    mytable
        ) qo
CROSS APPLY
        (
        SELECT  value + ', '
        FROM    mytable qi
        WHERE   qi._group = qo._group
        FOR XML PATH ('')
        ) gr(qvalue)

항상 세 개의 하드 코드 세트가 있다면 ID각각에 대해 _group, 당신은 만 사용할 수 있습니다 :

SELECT m3._group, m3.value + ', ' + m4.value + '(' + m5.value + ')' AS newvalue
FROM   mytable m3
LEFT JOIN
       mytable m4
ON     m4._group = m3.group
LEFT JOIN
       mytable m5
ON     m5._group = m3.group
WHERE  m3.id = 3
       AND m4.id = 4
       AND m5.id = 5

필요한 것은 쿼리가 아니라 그룹에 의해 그룹을 가진 간단한 선택과 집계 문자열 연결 기능입니다. 그러나 나는 TSQL의 정확한 기능을 기억하지 못한다.

업데이트 : TSQL에는 집계 연결 기능이 없지만 SQL2005 이후로 이러한 기능을 구현하기 위해 자신의 확장을 작성할 수 있습니다. Google 검색에 대한 많은 예가 있습니다 : TSQL 2005 연결 집계 예제.

이것은 약간의 호키이지만 작은 데이터 세트에서는 합리적으로 잘 작동해야한다고 생각합니다. 데이터가 많으면 커서와 루프를 만들어야합니다.

select max(case when ID = 4 then VALUE else null end) + ', ' + 
    max(case when ID = 4 then VALUE else null end) + '( ' +
    max(case when ID = 5 then VALUE else null end) + ') as NEWVALUE,
    [GROUP]
group by [GROUP]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top