sql如何取一个数字并显示它中的2个,2个中的2个

时间:2012-11-15 08:19:37

标签: sql oracle

无法在此找到任何内容,或者如果有人可以引导我查询已经提出的问题,那就太棒了。

表客户

ORDER,      QTY_ORDER  
A1234 ,        5

选择输出

ORDER,          QTY_ORDER  
A1234,            1 OF 5  
A1234,            2 OF 5  
A1234,            3 OF 5  
A1234,            4 OF 5  
A1234,            5 OF 5

2 个答案:

答案 0 :(得分:3)

首先:使用ORDER作为列名是一个可怕的想法。

(我使用order_id作为列名称,以简化操作)

with order_rows as (
   select distinct c.order_id, level as lvl, c.qty_order
   from customer c
   connect by level <= c.qty_order
)
select r.order_id, to_char(r.lvl)||' of '||r.qty_order
from order_rows r
order by order_id, lvl;

但这不会非常有效。

SQLFiddle演示:http://sqlfiddle.com/#!4/3cdc1/2

答案 1 :(得分:0)

这是MS SQL Server的解决方案,适用于任意数量的订单。我假设QTY_ORDER最多为2个字符。如果需要更多,请增加char(2)的大小以满足您的需求。

DECLARE @counter int; DECLARE @order varchar(10); DECLARE @qty int; 
DECLARE @sql nvarchar(max);

SELECT @sql = '';
SELECT @order = MIN([ORDER]) FROM Customer;
WHILE @order IS NOT NULL
BEGIN
    SET @counter = 1;
    SELECT @qty = QTY_ORDER FROM Customer WHERE [ORDER] = @order;
    WHILE @counter  @order;
END

SELECT @sql = SUBSTRING(@sql,1, LEN(@sql) - 6);
EXEC sp_executesql @sql;

输出:

Order QTY_ORDER
----- ---------
A1234 1  of 5 
A1234 2  of 5 
A1234 3  of 5 
A1234 4  of 5 
A1234 5  of 5 

编辑: 嗯。没有看到Oracle标签。我的错误。