无法在此找到任何内容,或者如果有人可以引导我查询已经提出的问题,那就太棒了。
表客户
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
答案 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标签。我的错误。