假设我有一张包含此类产品的表
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行。
答案 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让你尝试。