如何对dbo.WebsiteIP表IP去重并合并关联站点名?
解决SQL Server中按IP分组合并SiteName的问题
嘿,你要实现的是按IP地址分组,将对应的站点名称合并为逗号分隔的字符串,之前的Update语句方向不对,咱们直接用查询语句就能得到你想要的结果。
首先,针对你的dbo.WebsiteIP表,我们可以用SQL Server里经典的STUFF+FOR XML PATH('')组合来实现字符串聚合,具体语句如下:
SELECT IPAddress, STUFF( (SELECT ', ' + SiteName FROM dbo.WebsiteIP AS w2 WHERE w2.IPAddress = w1.IPAddress FOR XML PATH('')), 1, 2, '' ) AS WebsiteName FROM dbo.WebsiteIP AS w1 GROUP BY IPAddress ORDER BY IPAddress;
语句解释:
- 内层的子查询
(SELECT ', ' + SiteName ... FOR XML PATH(''))会把同一个IP下的所有SiteName拼接成类似, website1, website2的字符串。 STUFF函数的作用是去掉开头多余的,:参数1, 2, ''表示从第1个字符开始,删除2个字符(也就是开头的,),替换为空字符串。- 外层通过
GROUP BY IPAddress来获取唯一的IP地址,确保每个IP只返回一行。
执行这个语句后,就能得到符合预期的结果(注:你的预期结果里192.168.30.8漏了website16和website17,实际执行会包含所有对应站点):
| IPAddress | WebsiteName |
|---|---|
| 192.168.30.6 | website1, website2 |
| 192.168.30.7 | website3, website4, website5, website6, website7 |
| 192.168.30.8 | website8, website9, website10, website11, website13, website14, website16, website17 |
| 192.168.30.9 | website12 |
| 192.168.30.24 | website15 |
内容的提问来源于stack exchange,提问作者T.Anand
相关产品推荐
相关产品推荐

