2013-07-31 58 views
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 

結果:(1行爲A,2行對B,4行至C,3行至D)

有人可以幫助我嗎?

回答

1

使用LEVEL得到計數從1到的最大行數「表」:

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

這會給你下表:

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

接下來,加入這您的LABELS表格其中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

最後,好工作包括創建/填充腳本:)

+0

謝謝,非常有用! –

1

另一種方法,使用model子句:

​​

結果:

PRODUCT 
---------- 
A 
B 
B 
C 
C 
C 
C 
D 
D 
D 

SQLFiddle Demo

+0

謝謝,其他方式非常有用;) –