有幾個選擇這裏,但這裏有一些事情要考慮:
- 確定你希望你的最左邊的項目是什麼 - 在這種情況下,看起來應該是
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