XML查询示例五

使用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
福建 福州
福建 厦门
广东 广州
广东 深圳
广东 珠海
江苏 常州
江苏 南京
江苏 苏州
江苏 无锡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值