無法找到任何東西或者如果有人能夠指示我已經問過的問題,那會很好。sql如何獲取一個數字並顯示它1 of 2,2 of 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
無法找到任何東西或者如果有人能夠指示我已經問過的問題,那會很好。sql如何獲取一個數字並顯示它1 of 2,2 of 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
第一:使用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
下面是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標籤。我的錯。
我添加了Oracle標籤。在此之前,它被標記爲'plsql'(這是Oracle的存儲過程語言) - 但問題不在於編寫存儲過程,而是將其刪除。 –
謝謝,這解決了我的問題。 – user1826003