根据列中的数字重复行

Esr*_*_92 4 sql sql-server

SqlFiddle演示

我需要根据表格中的这篇文章的数量重复文章的每个条形码.

这是源数据:

| BarCode | quantity |
|---------|----------|
| 5142589 |        7 |
|  123454 |        5 |
| 1111145 |        3 |
Run Code Online (Sandbox Code Playgroud)

我想要看起来像这样的结果:

Barcode
-------
5142589
5142589
5142589
5142589
5142589
5142589
5142589
123454
123454
123454
123454
123454
1111145
1111145
1111145
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢

Vla*_*nov 5

您可以使用数字表.永久的,或动态生成的.

下面的查询CTE用于生成最多1000个数字.这是SQL小提琴.

WITH 
e1(n) AS
(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
) -- 10
,e2(n) AS (SELECT 1 FROM e1 CROSS JOIN e1 AS b) -- 10*10
,e3(n) AS (SELECT 1 FROM e1 CROSS JOIN e2) -- 10*100
,CTE_Numbers
AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY n) AS Number
    FROM e3
)
SELECT b.BarCode, s.quantity
FROM 
  TABLE_BARCODE b
  INNER JOIN TABLE_STOCK s ON b.IdArticle = s.IdArticle
  CROSS APPLY
  (
    SELECT TOP(s.quantity) CTE_Numbers.Number
    FROM CTE_Numbers
    ORDER BY CTE_Numbers.Number      
  ) AS CA
Run Code Online (Sandbox Code Playgroud)

结果:

| BarCode | quantity |
|---------|----------|
| 5142589 |        7 |
| 5142589 |        7 |
| 5142589 |        7 |
| 5142589 |        7 |
| 5142589 |        7 |
| 5142589 |        7 |
| 5142589 |        7 |
|  123454 |        5 |
|  123454 |        5 |
|  123454 |        5 |
|  123454 |        5 |
|  123454 |        5 |
| 1111145 |        3 |
| 1111145 |        3 |
| 1111145 |        3 |
Run Code Online (Sandbox Code Playgroud)

  • 你是更快,更好的答案;)我想使用`VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1), (1))`而不是'UNION ALL` [小提琴](http://sqlfiddle.com/#!6/6470e/35/0) (2认同)