多行合并问题
上周遇到一SQL问题,多行数据合并成一行。
需求是这样的。
设计一表。商品对应的属性和属性值,由于商品可以对应多个属性,每个属性可以对应多个属性值。于是设计了这个表
[caption id="attachment_303" align="alignnone" width="997"] 产品属性和属性值关联表[/caption]
但是先需要做成这样的效果。
[caption id="attachment_304" align="alignnone" width="722"] 产品对应属性和属性值的显示效果[/caption]
这明显是多行合并问题,但是怎么合并却是个难题。苦思多时,没有结果,于是求助强大的google,网上果然有高人相助。
其实原理还是蛮简单的,就是把查询的结果输出成xml,然后读取这个xml,替换掉你要拼接的字段,就ok了。
现贴出核心代码,为自己做记录用。
[code lang="SQL"]
SELECT *
FROM (SELECT DISTINCT PAttributeID, PAttributeName, ProductID, SortId
FROM T_PAttrRelation) a OUTER apply
(SELECT pValueNames = STUFF(REPLACE(REPLACE
((SELECT pValueName
FROM T_PAttrRelation N
WHERE PAttributeID = a.PAttributeID AND PAttributeName = a.PAttributeName AND ProductID = a.ProductID AND SortId = a.SortId FOR XML AUTO),'<N pValueName="', ','), '"/>', ''), 1, 1, '')) N
[/code]
写个博客不容易,请转载的时候备注下原文出处,谢谢
作者:keepnode
博客地址:http://www.cnblogs.com/woaic
每件事到最后都是好事,如果不是好事,说明还没有到最后
=========================
作者:keepnode
博客地址:http://www.cnblogs.com/woaic
每件事到最后都是好事,如果不是好事,说明还没有到最后
=========================