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

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


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

尤其是第一篇和第三篇。

​​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, ',')

统计结果: