多行合并问题

上周遇到一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]

转载于:https://www.cnblogs.com/woaic/archive/2013/02/25/3942824.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值