如何根据SQL中的数量显示重复项?

How to display duplicate items based on the quantity in SQL?

我有一个 table 字段内容:

item    qty
-----  -----
tea      2

我要显示如下

item   qty
----  ------
tea     1 
tea     1

如何像上面那样创建 SQL 查询?

使用Recursive CTE

;WITH cte
     AS (SELECT item,qty,1 num from yourtable
         UNION ALL
         SELECT item,
                qty,
                num + 1
         FROM   cte
         WHERE  num < qty)
SELECT item,
       1 as Qty
FROM   cte 

或使用 Tally table。与 Recursive CTE

相比,它会有更好的性能
;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 e2 CROSS JOIN e2 AS b), -- 100*100
SELECT a.item,
       1 AS qty
FROM   yourtable a
       JOIN (SELECT n = Row_number()OVER (ORDER BY n)
             FROM   e2) b
         ON b.n <= a.qty; 

注: 基于 Quantity 您可能需要增加 CTE 的 cross join

检查 here 了解更多信息

样本TABLE

CREATE TABLE #TEMP(ITEM VARCHAR(10),QTY INT)    

INSERT INTO #TEMP
SELECT 'TEA',2
UNION ALL
SELECT 'COFFEE',3

如果你有不止一种类型的物品,你想得到物品的数量,你可以用下面的查询。

查询

;WITH CTE AS      
(
    -- You will get each ITEM from your table
    SELECT ITEM,  QTY, 1     NEWQTY
     FROM #TEMP 
     UNION ALL
     -- Here it will loop and shows the repeated values of each ITEM 
     SELECT C1.ITEM,C1.QTY,NEWQTY + 1
     FROM   CTE C1
     JOIN #TEMP T1 ON C1.item= T1.ITEM
     WHERE  C1.NEWQTY < T1.qty
)
SELECT ITEM,
       1 QTY
FROM   CTE 
ORDER BY ITEM