2016-10-11 2 views
0

최근에 유사한 질문을했으나 불행히도 요청의 성격이 변경되었습니다. 이 코드를 조금만 보았지만 내 두뇌는 친구이며 필요한만큼 작업 할 수있는 방법을 생각할 수 없습니다.다른 필드를 기반으로 여러 필드를 하나로 연결하는 데 도움이 필요합니다.

SQL 2005에서이 작업은 이와 같이 수백 개의 값을 포함합니다.

미리 감사드립니다.

샘플 표

+----+-------------+---------------------+---------------------+ 
| ID | CLASS | PARENT_ATTRIBUTE |  ATTRIBUTE  | 
+----+-------------+---------------------+---------------------+ 
| 1 | Genre  | A     | Hip Hop    | 
| 1 | Genre  | B     | Pop     | 
| 1 | Instruments | Keyboards   | Synth    | 
| 1 | Instruments | Keyboards   | Grand Piano   | 
| 1 | Instruments | Drums    | Kit     | 
| 1 | Moods  | Positive/Optimistic | Uplifting/Inspiring | 
| 1 | Moods  | Positive/Optimistic | Happy/Feel Good  | 
| 1 | Moods  | Musical Feel  | Pulsing    | 
+----+-------------+---------------------+---------------------+ 

원하는 출력 어쩌면 당신은이 출력을 할 수 있습니다,하지만 난 정말 방법을 모르는 PIVOT을 사용

+----+----------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ 
| ID | MOODS                         | INSTRUMENTS            | 
| 1 |Positive/Optimistic - Uplifting/Inspiring, Positive/Optimistic - Happy/Feel Good, Musical Feel - Pulsing | Keyboards - Synth, Keyboards - Grand Piano, Drums - Kit | 
+----+----------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ 
+0

당신이 장르의 열을 싶지 않아? – Beth

답변

0

트릭을 M AX 및 CASE WHEN 열로 클래스를 넣어 :

SELECT ID, 
MAX(CASE WHEN class = 'Instruments' THEN attribs END) as INSTRUMENTS, 
MAX(CASE WHEN class = 'Moods' THEN attribs END) as MOODS, 
MAX(CASE WHEN class = 'Genre' THEN attribs END) as GENRES 
FROM (
    SELECT 
    id, class, 
    STUFF ((
     SELECT ', ' + parent_attribute + ' - ' + attribute 
     FROM YourTable i 
     WHERE i.ID = o.ID AND i.CLASS = o.CLASS 
     FOR XML PATH('') 
    ), 1, 2, '') AS attribs 
    FROM (SELECT DISTINCT id, class FROM YourTable) o 
) q 
GROUP BY id 
ORDER BY id; 

을 다른 방법으로, SQL Server 2008 또는 이상에 PIVOT을 사용 : 이

select ID, 
[Instruments] as INSTRUMENTS, 
[Moods] as MOODS, 
[Genre] as GENRES 
from (
    SELECT id, class, 
    STUFF ((
     SELECT ', ' + parent_attribute + ' - ' + attribute 
     FROM YourTable i 
     WHERE i.ID = o.ID AND i.CLASS = o.CLASS 
     FOR XML PATH('') 
    ), 1, 2, '') AS attribs 
    FROM (select distinct id, class from YourTable) o 
) q 
PIVOT (MAX(attribs) FOR class IN ([Instruments], [Moods], [Genre]) 
) pvt 
order by id; 
관련 문제