0

假设我有一张桌子,上面有这样的产品

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

它有点复杂,但想法是一样的。

我需要返回这样的东西

aaaa0001
aaaa0002
bbbb0003
bbbb0004
bbbb0005
cccc0006
dddd0007
dddd0008
dddd0009
dddd0010

我的意思是,每个产品列中指定的次数,最后带有某种标识符。

我怎样才能做到这一点 ?

我想到了表变量,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

但这意味着我必须在 product 变量中为每个产品插入次数,例如

@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 回答