-2

在这方面找不到任何东西,或者如果有人可以指导我解决已经提出的问题,那就太好了。

表客户

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
4

2 回答 2

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

于 2012-11-15T08:29:04.207 回答
0

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

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

选择 @sql = '';
从客户中选择@order = MIN([ORDER]);
而@order 不为空
开始
    SET @counter = 1;
    SELECT @qty = QTY_ORDER FROM Customer WHERE [ORDER] = @order;
    而@counter @order;
结尾

选择 @sql = SUBSTRING(@sql,1, LEN(@sql) - 6);
执行 sp_executesql @sql;

输出:

订单 QTY_ORDER
----- ---------
A1234 1 的 5
A1234 2 的 5
A1234 3 的 5
A1234 4 的 5
A1234 5 的 5

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

于 2012-11-15T08:45:31.443 回答