같은 뭔가 :
- 당신이 당신의 가장 왼쪽에있는 항목이 원하는 것을 결정은 -이 경우, 그것을
station
인 것으로 보입니다. 그런 경우에 접근하는 한 가지 방법은 먼저 별개의 스테이션 세트를 얻는 것입니다. 그룹 별 또는 고유 한 그룹을 사용하여 수행 할 수 있습니다.
- 목록을 생성하려는 항목의 레벨을 결정하십시오.이 경우에는
client_code
입니다. 따라서, 당신은 그 수준에 있기 위해 내부 선택을하고 싶습니다. 이를 수행하는 한 가지 방법은 xml을 사용하기 전에 클라이언트 코드의 고유 한 집합을 해결하는 것입니다.
한 가지 비판 - 간단한 데이터 세트를 제공하는 것이 좋습니다. 훨씬 쉽고 빠르게 답변을 제공합니다.
여기에도 대안이 있지만 여기에는 가능한 해결책이 있습니다.
테스트 데이터
select top (100)
client_id = abs(checksum(newid())) % 100,
client_code = char(abs(checksum(newid())) % 10 + 65)
into #client
from sys.all_columns a
cross join sys.all_columns b;
select top (100)
station = abs(checksum(newid())) % 10,
client_id = abs(checksum(newid())) % 50 -- just a subset
into #temp
from sys.all_columns a
cross join sys.all_columns b;
쿼리
select station, client_codes = stuff((
select ', ' + cc.client_code
from (
select distinct c.client_code -- distinct client codes
from #temp t
join #client c
on t.client_id = c.client_id
where t.station = s.station) cc
order by client_code
for xml path('')), 1, 2, '')
from (
select distinct station
from #temp) s; -- distinct stations
결과
station client_codes
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0 B, C, D, E, G, J
1 A, B, D, G, H, J
2 A, C, E, F, G, H, J
3 B, C, H, J
4 A, B, C, D, F, H, J
5 H, J
6 D, E, F, G, I
7 A, C, D, F, G, H, J
8 A, E, G
9 C, E, F, G, I
희망이 도움이됩니다.
어, 그건 나를 미치게 만들었습니다. 이제는 더 의미가 있습니다, 감사합니다! – Relevant