知道数量的多个插入

时间:2012-09-04 18:59:03

标签: sql sql-server sql-server-2008 identity-column

假设我有一张包含此类产品的表

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

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

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

我正面临着这个问题。我怎样才能做到这一点 ?用光标?这就是我的想法,但我想知道是否有更好的选择。

原始表格中最多300行。

1 个答案:

答案 0 :(得分: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)

Here is a sqlfiddle让你尝试。