2016-01-06 67 views
0

我有以下的“订单表”:拆分一行到多行基于列的值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 
+0

你需要一个交叉连接,生成数字重复的行使用递归查询:看到这个问题/答案是:http:/ /stackoverflow.com/questions/4481396/mysql-cartesian-product-between-two-select-statements – CodeLikeBeaker

+0

什么是数据库平台? SQL Server; MySQL的? –

+0

sql server ..基本上我想要项目重复的次数作为初始数量订购,并且数量显示为1在每个项目的最终输出 – HunTer

回答

1

你没有指定哪些你正在使用的RDBMS,所以你如何生成数字将取决于(可能是SQL Server的递归CTE,使用DUAL for Oracle等)。我只编写了代码来处理您所显示的数据,但显然您需要在最终解决方案中考虑大于4的数字。

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 
0

可以使用公用表表达式根据数量字段如下

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