使用XML,合并和拆分
CREATE TABLE #tempCityState (State NVARCHAR(10), City NVARCHAR(50))
INSERT INTO #tempCityState
SELECT '江苏', '南京' UNION
SELECT '江苏', '苏州' UNION
SELECT '江苏', '无锡' UNION
SELECT '江苏', '常州' UNION
SELECT '广东', '广州' UNION
SELECT '广东', '深圳' UNION
SELECT '广东', '珠海' UNION
SELECT '福建', '福州' UNION
SELECT '福建', '厦门'
SELECT * FROM #tempCityState
State City
福建 福州
福建 厦门
广东 广州
广东 深圳
广东 珠海
江苏 常州
江苏 南京
江苏 苏州
江苏 无锡
合并
SELECT DISTINCT State, (SELECT STUFF((SELECT ',' + City
FROM #tempCityState
WHERE State = t.State
FOR XML PATH('')),1,1,'')) AS Cities
INTO #tempCityStateCSV
FROM #tempCityState t
SELECT * FROM #tempCityStateCSV
State Cities
福建 福州,厦门
广东 广州,深圳,珠海
江苏 常州,南京,苏州,无锡
拆分
SELECT A.[State], Split.a.value('.', 'VARCHAR(100)') AS City
FROM (SELECT [State], CAST ('<M>' + REPLACE([Cities], ',', '</M><M>') + '</M>' AS XML) AS String
FROM #tempCityStateCSV) AS A
CROSS APPLY String.nodes ('/M') AS Split(a)
ORDER BY 1,2
State City
福建 福州
福建 厦门
广东 广州
广东 深圳
广东 珠海
江苏 常州
江苏 南京
江苏 苏州
江苏 无锡