당신이 SEQNO 더 3보다 결코 알고 경우 다음 CLR UDA
select Id, Names = stuff((
select '/'+Name from table1 b
where a.Id = b.Id order by SeqNo
for xml path (''))
, 1, 1, '')
from table1 a
group by Id
또는 쓰기 :
이
select Id, Names = stuff(
max(case when SeqNo = 1 then '/'+Name else '' end)
+ max(case when SeqNo = 2 then '/'+Name else '' end)
+ max(case when SeqNo = 3 then '/'+Name else '' end)
, 1, 1, '')
from table1
group by Id
그렇지 않으면이 같은 항목의 임의의 수에 대한 일반적인 솔루션입니다 .
편집 : 상관 된 테이블에 잘못된 별칭이 있습니다!
Edit2 : 다른 버전, Remus의 재귀 예제를 기반으로합니다. 을 선택하는 방법을 생각할 수 없었습니다. 집계 또는 정렬없이 ID 당 마지막 재귀. 아무도 몰라?
;with
myTable as (
select * from (
values
(1, 1, 'RecordA')
, (2, 1, 'RecordB')
, (3, 1, 'RecordC')
, (1, 2, 'RecordD')
, (4, 1, 'RecordE')
, (5, 1, 'RecordF')
, (3, 2, 'RecordG')
) a (Id, SeqNo, Name)
)
, anchor as (
select id, name = convert(varchar(max),name), seqno
from myTable where seqno=1
)
, recursive as (
select id, name, seqno
from anchor
union all
select t.id, r.name + '/' + t.name, t.seqno
from myTable t
join recursive r on t.id = r.id and r.seqno+1 = t.seqno
)
select id, name = max(name)
from recursive
group by id;
---- without aggregation, we get 7 rows:
--select id, name
--from recursive;
@Johannes - 귀하의 의견을 보내 주셔서 감사합니다. 그것은 정말로 도움이되었다! !! 수천 개의 레코드가있는 테이블이있어서 고객이 원하는 형식으로 선택해야하기 때문에이 질문을드립니다. 그냥 커서가 이것에 대한 끌기라고 생각하고 어떤 아이디어라도 도움이되었을 것입니다. 샘플 데이터로 매우 명확하게 설명했기 때문에 숙제가 필요하지 않습니다. – blntechie
@Johannes : 정말 중요합니까? 이것이 모두에게 이익이된다면? – Sung