2013-04-26 3 views
0

SQL Server에서 공통 ID가 1 행에 여러 행을 결합하는 데 도움이 필요합니다. 다음 예는 다음과 같습니다하나의 테이블에서 여러 행을 결합하는 SQL 쿼리

ID Name Number 
1 Joe 1234 
1 Marie 5678 
1 Ron 2222 
1 Tom 4444

쿼리이를 표시하려면 :

ID Name Number Name Number Name Number Name Number 
1 Joe 1234 Marie 5678 Ron 2222 Tom 4444
+0

다른 행이 있으면 결과 집합을 표시해야합니다 :'1 | 짐보 | 9999 |'? 네가 겪고있는 아주 이상한 결과 인 것 같아. – Yuck

답변

1
with data as (
    select *, row_number() over (partition by ID order by ID) as rowid 
    from (
     values (1, 'Joe', 1234), 
       (1, 'Marie', 5678), 
       (1, 'Ron', 2222), 
       (1, 'Tom', 4444) 
    ) t (ID, Name, Number) 
) 
select t.ID, t.[1] as Name, t2.[1] as Number, t.[2] as Name, t2.[2] as Number, 
      t.[3] as Name, t2.[3] as Number, t.[4] as Name, t2.[4] as Number 
from (
    select ID, Name, rowid 
    from data 
) d pivot (min(Name) for rowid in ([1], [2], [3], [4])) t 
inner join (
    select ID, Number, rowid 
    from data 
) d2 pivot (min(Number) for rowid in ([1], [2], [3], [4])) t2 on t.ID = t2.ID 
1

는 내가 얻을 결과에 UNPIVOT과 PIVOT 기능을 모두 적용 건의 할 것입니다. UNPIVOT은 여러 행으로 namenumber 열을 변환합니다, 당신은 열로 그 다시 변환 할 PIVOT 기능을 적용됩니다

select * 
from 
(
    select id, 
    col+'_'+cast(rn as varchar(10)) col, 
    value 
    from 
    (
    select id, name, cast(number as varchar(10)) number, 
     row_number() over(partition by id order by number) rn 
    from yt 
) src 
    unpivot 
    (
    value 
    for col in (name, number) 
) unpiv 
) d 
pivot 
(
    max(value) 
    for col in (name_1, number_1, name_2, number_2, 
       name_3, number_3, name_4, number_4) 
) piv; 

SQL Fiddle with Demo를 참조하십시오. 결과는 다음과 같습니다 :

| ID | NAME_1 | NUMBER_1 | NAME_2 | NUMBER_2 | NAME_3 | NUMBER_3 | NAME_4 | NUMBER_4 | 
-------------------------------------------------------------------------------------- 
| 1 | Joe |  1234 | Ron |  2222 | Tom |  4444 | Marie |  5678 | 
관련 문제