簡體   English   中英

根據列值將行拆分為多行

[英]Split a row into multiple rows based on a column value SQL

我有以下“訂單表”:

    Item        Quantity
    pencil      2
    pen         1
    Notebook    4

我需要這樣的結果:

  Item        Quantity
  pencil      1
  pencil      1
  pen         1
  Notebook    1
  Notebook    1
  Notebook    1
  Notebook    1

您沒有指定要使用的RDBMS,因此如何生成數字將取決於此(可能是SQL Server的遞歸CTE,Oracle的DUAL等)。 我只編寫了代碼來處理您顯示的數據,但是顯然在最終解決方案中您需要考慮大於四的數字。

SELECT
    MT.sr_no,
    MT.item_name,
    1 AS quantity
FROM
    My_Table MT
INNER JOIN
    (
        SELECT 1 AS nbr UNION ALL SELECT 2 AS nbr UNION ALL
        SELECT 3 AS nbr UNION ALL SELECT 4 AS nbr
    ) N ON N.nbr <= MT.quantity

您可以使用公共表表達式使用遞歸查詢,根據數量字段生成數量重復的行,如下所示

WITH cte (sno,item,quantity,rnum)
AS
(
    SELECT sno,item,quantity, 1 as rnum
    FROM [Order]

    UNION ALL

    SELECT cte.sno,cte.item,cte.quantity, rnum+1
    FROM [Order] JOIN cte ON [Order].sno = cte.sno
    AND cte.rnum < [Order].quantity
)
SELECT item,1 AS Quantity 
FROM cte 
ORDER BY sno

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM