2010-12-16 17 views
1

sku @itemnoの製品名の最初の6文字が同一であるSKUを探している製品のデータセットを繰り返して、CSV文字列に連結しますeコマースプラットフォームにアップロードするデータセットの一部として使用することができます。関連する操作は次のとおりです。SQL Server 2005で集中的なCURSOR操作の代替案を提案する

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などを使ってこれを行うよりエレガントな方法がありますか?

答えて

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; 
3

DECLARE @Val VARCHAR(MAX) 
SELECT @Val = COALESCE(@Val + ',','') + sku 
FROM tbl 
WHERE name LIKE (
         SELECT LEFT(name,6) 
         FROM tbl 
         WHERE sku = @itemno) + '%' 
+0

1のようなものを試してみてください。 COALESCEもいいです.... –

+0

+1あなたにも。 stuff/xmlのアプローチは、単一の値を返すために多少のように思えました。私はX - をグループ化するためにそれを使用します) –

+0

この質問はここで答える:http://stackoverflow.com/questions/455423/how-to-turn-one-column-of-a-table-into-a-csv -string-in-sql-server-without-using-a – Drew