-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) ください。

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

SELECT @sql = '';
SELECT @order = MIN([ORDER]) FROM 顧客;
WHILE @order IS NOT NULL
始める
    SET @カウンター = 1;
    SELECT @qty = QTY_ORDER FROM Customer WHERE [注文] = @注文;
    WHILE @counter @order;
終わり

SELECT @sql = SUBSTRING(@sql,1, LEN(@sql) - 6);
EXEC 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 に答える