我正在遍历搜索SKU的产品数据集,其中产品名称的前6个字符与sku @itemno相同,然后将它们连接成CSV字符串,以用作要上传到数据集的数据集的一部分电子商务平台。以下是相关操作:
DECLARE c1 CURSOR READ_ONLY
FOR
SELECT sku FROM tbl WHERE name LIKE (SELECT LEFT(name,6) FROM tbl WHERE sku = @itemno) + '%'
OPEN c1
FETCH NEXT FROM c1
INTO @c1
WHILE @@FETCH_STATUS = 0
BEGIN
SET @associated = @associated + @c1 + ','
FETCH NEXT FROM c1
INTO @c1
END
你可以想象,考虑到15,000多条记录的数据集大小,这是非常缓慢的。当然有一种更优雅的方式来使用PIVOT或其他东西吗?
答案 0 :(得分:3)
SQL Server 2005以后:
select
stuff(
(select ', ' + sku
from tbl
WHERE name LIKE (SELECT LEFT(name,6) FROM tbl WHERE sku = @itemno) + '%'
for xml path('')
)
, 1, 2, '') as namelist;
答案 1 :(得分:3)
尝试类似
的内容DECLARE @Val VARCHAR(MAX)
SELECT @Val = COALESCE(@Val + ',','') + sku
FROM tbl
WHERE name LIKE (
SELECT LEFT(name,6)
FROM tbl
WHERE sku = @itemno) + '%'