2012-11-15 14 views

回答

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

+0

謝謝,這解決了我的問題。 – user1826003

0

下面是MS SQL服務器,會爲任何數量的訂單工作的解決方案。我假定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標籤。我的錯。

+0

我添加了Oracle標籤。在此之前,它被標記爲'plsql'(這是Oracle的存儲過程語言) - 但問題不在於編寫存儲過程,而是將其刪除。 –