2

ラベルを印刷する製品のリストを生成しようとしましたが、すべて失敗しました (レベルによる接続で)!

私のテーブル:

CREATE TABLE LABELS
(
 PRODUCT    VARCHAR2(8 BYTE),
  Q_ROWS     NUMBER
);

表の情報:

INSERT INTO LABELS (PRODUCT, Q_ROWS) VALUES('D', 3);
INSERT INTO LABELS (PRODUCT, Q_ROWS) VALUES('A', 1);
INSERT INTO LABELS (PRODUCT, Q_ROWS) VALUES('C', 4);
INSERT INTO LABELS (PRODUCT, Q_ROWS) VALUES('B', 2);

オラクルの選択で期待される結果

PRODUCT
A       
B
B
C
C
C
C
D
D
D

結果: (A に 1 行、B に 2 行、C に 4 行、D に 3 行)

誰かが私を助けることができますか?

4

2 に答える 2

1

から最大行数LEVELまでカウントする「テーブル」を取得するために使用します。1

SELECT LEVEL AS LabelNum
FROM DUAL
CONNECT BY LEVEL <= (SELECT MAX(Q_Rows) FROM Labels)

これにより、次の表が得られます。

LabelNum
--------
       1
       2
       3
       4

次に、これをLABELSテーブル whereに結合しますLabelNum <= Q_Rows。クエリ全体は次のとおりです。

WITH Mult AS (
  SELECT LEVEL AS LabelNum
  FROM DUAL
  CONNECT BY LEVEL <= (SELECT MAX(Q_Rows) FROM Labels)
)
SELECT Product
FROM Labels
INNER JOIN Mult ON LabelNum <= Q_Rows
ORDER BY Product, LabelNum

動作中の SQLFiddle hereがあります。

最後に、作成/入力スクリプトを含む良い仕事です:)

于 2013-07-31T18:16:07.273 に答える