【发布时间】:2013-04-11 02:19:05
【问题描述】:
我有一张包含Product 记录和Model 记录的表格。产品和型号记录都有 QTY 和 Size 列。对于给定的product_id,我想从Model 记录中获取所有qtys 和sizes,并将它们放入**parent 的single* qty and size 字段 Product 记录,由管道“|”分隔。这是我到目前为止的sql。它成功地从给定 product_id 的模型记录中获取大小和数量值,但我无法让它更新父产品记录字段,并递归执行。有人可以帮帮我吗?谢谢
本示例使用 product_id '26206'
--declare local variables
DECLARE
@size_DelimitedString VARCHAR(MAX),
@qty_DelimitedString VARCHAR(MAX)
--pivot rows into delimited string
SELECT
@size_DelimitedString = COALESCE(@size_DelimitedString, '') + CONVERT(VARCHAR(10), [BD New Product Data].model_size) + '|'
FROM
[BD New Product Data]
where record_type = 'model' and product_id = '26206'
SELECT
@qty_DelimitedString = COALESCE(@qty_DelimitedString, '') + CONVERT(VARCHAR(10), [BD New Product Data].model_quantity) + '|'
FROM
[BD New Product Data]
where record_type = 'model' and product_id = '26206'
--trim off last pipe
SET @size_DelimitedString = (SELECT SUBSTRING(@size_DelimitedString, 1, LEN(@size_DelimitedString)-1))
SET @qty_DelimitedString = (SELECT SUBSTRING(@qty_DelimitedString, 1, LEN(@qty_DelimitedString)-1))
--show results
SELECT @size_DelimitedString
SELECT @qty_DelimitedString
【问题讨论】:
-
什么 RDBMS 和版本? Oracle 支持 WM_CONCAT,它可以在 10g 或更早的版本中轻松执行此操作,而 LIST_AGG 或 XML_AGG 通过将多行组合为 1 来消除递归部分。SQL Server 这是我的猜测,这是...使用 XML Path 这是有点复杂,但可以工作example
-
我正在使用 MS SQL 2012.Microsoft SQL Server Management Studio 11.0.2100.60 Microsoft 数据访问组件 (MDAC) 6.1.7601.17514 Microsoft MSXML 3.0 4.0 5.0 6.0 Microsoft Internet Explorer 9.10.9200.16540 Microsoft .NET Framework 4.0 .30319.296 操作系统 6.1.7601
-
完全没有压力,但是meta.stackexchange.com/questions/10672/…。 :)
标签: sql sql-server sql-server-2012 recursive-query coalesce