SQL Server를 사용하고 있기 때문에 결과를 얻을 수있는 여러 가지 방법이 있지만 모두에 row_number()
을 사용해야합니다.
당신은 CASE 표현식으로 집계 함수를 사용할 수 있습니다
select visitnumber,
max(case when seq=1 then id end) ID1,
max(case when seq=2 then id end) ID2,
max(case when seq=3 then id end) ID3,
max(case when seq=4 then id end) ID4,
max(case when seq=5 then id end) ID5
from
(
select visitnumber, id,
row_number() over(partition by visitnumber
order by id) seq
from yourtable
) d
group by visitnumber;
는 SQL Fiddle with Demo
당신은 PIVOT 기능을 사용할 수 있습니다 참조 :
select visitnumber, ID1, ID2, ID3, ID4, ID5
from
(
select visitnumber, id,
'ID'+cast(row_number() over(partition by visitnumber
order by id) as varchar(10)) seq
from yourtable
) d
pivot
(
max(id)
for seq in (ID1, ID2, ID3, ID4, ID5)
) piv;
이 SQL Fiddle with Demo를 참조하십시오. 당신은 당신이 5 아이디의 최대있을 것이라고 주장하지만 알 수없는 번호가 있다면, 당신은 결과를 얻기 위해 동적 SQL을 사용할 수
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME('ID'+cast(row_number() over(partition by visitnumber
order by id) as varchar(10)))
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT visitnumber,' + @cols + '
from
(
select visitnumber, id,
''ID''+cast(row_number() over(partition by visitnumber
order by id) as varchar(10)) seq
from yourtable
) x
pivot
(
max(id)
for seq in (' + @cols + ')
) p '
execute sp_executesql @query;
이 SQL Fiddle with Demo를 참조하십시오.
| VISITNUMBER | ID1 | ID2 | ID3 | ID4 | ID5 |
------------------------------------------------------------
| 39332 | 759666 | 769445 | 775795 | 783781 | 861130 |
| 40329 | 762595 | 769447 | 775796 | 783782 | (null) |
당신이 MSSQL 서버를 사용하십니까 : 모든 버전은 결과를 줄 것이다? – valex
예 MSSQL Server를 사용하고 있습니다. – Kenry87
ID가 별도의 열 또는 목록에 필요합니까? VisitNumber에 5 개 이상의 ID가있을 수 있습니까? – BWS