意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

ms sql server 实现类似mysql group_concat的功能

来源:恒创科技 编辑:恒创科技编辑部
2023-12-19 02:11:59


sql server 2008没有group_contact功能,有点犯难。
然后……

非常好的博文,完全可以解决这个问题和疑问。


ms sql server 实现类似mysql group_concat的功能

尤其是第一篇和第三篇。

​​http://outofmemory.cn/code-snippet/1705/ms-sql-server-achieve-leisi-mysql-group-concat-function​​​ ps:
sql-server 2012之后微软提供了CONCAT函数可以实现这个功能。


我当前业务中的一端类似代码:

SELECT 
n.*,
(SELECT Text + ',' FROM xt_BBS_PostPrefixLabel
WHERE PostId = n.PostId
FOR XML PATH('')) as Text
FROM
xt_BBS_BannerNews n
left join
xt_BBS_PostDetail p
on
n.PostId = p.Id

由于在高级语言中(C#、Js等),形如"aaa,bbb,ccc,"这样最后多一个逗号的问题很好处理,我就把sql精简了一点。
都很好理解。


单表的时候:

select
op.OpenID,
STUFF(( SELECT CONCAT(',', b.OrderID) FROM PaymentOrderOpenID b WHERE b.OpenID = op.OpenID FOR XML PATH('')),1 ,1, '') aaa
from
PaymentOrderOpenID op
where ...
group by op.OpenID

order by
op.OpenID

将CONTACT用在复杂语句中示例:

select
p.Mobile as mobile ,p.CustomerName as customerName, CONCAT ( p.TableId, ',') as orderIds,
max(f.PersonId) as saleId, min(p.ConfirmDate) as firstDealTime
from
PaymentOrder p
left join
FollowCustomer f
on p.CustomerId=f.CustomerUserId
where
****
group by p.Mobile,p.CustomerName,CONCAT ( p.TableId, ',')

统计结果:

ms sql server 实现类似mysql group_concat的功能_xml


上一篇: MySQLIllegalmixofcollations(utf8_tolower_ci,IMPLICIT)and(utf8_general_ci,IMPLICIT)foroper 下一篇: ANALYZE TABLE 导致的数据库堵塞分析