0

このような製品を備えたテーブルがあるとしましょう

product  |  number
----------------------
aaaa     |     2
bbbb     |     3
cccc     |     1
dddd     |     4

少し複雑ですが、考え方は同じです。

私はこのようなものを返す必要があります

aaaa0001
aaaa0002
bbbb0003
bbbb0004
bbbb0005
cccc0006
dddd0007
dddd0008
dddd0009
dddd0010

つまり、各製品は列に指定された回数で、最後に何らかの識別子が付いています。

これどうやってするの ?

IdにIDを持つテーブル変数を考えました

DECLARE @Codigos TABLE (ID INT IDENTITY(1,1), Barra Varchar(50) NOT NULL)

そして挿入の後に、

select rtrim(ltrim(barra)) + right('0000' + rtrim(ltrim(cast(id as varchar(10)))),4) from @Codigos

しかし、これは、製品ごとに製品変数に回数を挿入する必要があることを意味します。

@Codigos
id     |   Barra
----------------
1      |   aaaa
2      |   aaaa

私はそれで問題に直面しています。どうやってやるの ?カーソルで?と思ったのですが、他に良い方法があれば知りたいです。

元のテーブルでは最大 300 行になります。

4

1 に答える 1

6

これはそれを行う必要があります:

;WITH CTE AS
(
    SELECT product, Number, 1 RN
    FROM YourTable
    UNION ALL
    SELECT product, Number, RN + 1
    FROM CTE
    WHERE RN + 1 <= Number
)
SELECT product + RIGHT('000' + CAST(RN AS VARCHAR(3)),3) YourColumn
FROM CTE
ORDER BY product, Number
OPTION(MAXRECURSION 0)

これはあなたが試すためのsqlfiddleです。

于 2012-09-04T19:09:57.193 に答える