2012-09-26 33 views
2

可能重複:
Select Records multiple times from table如何獲得多行,當值> 1

我想爲TABLE_B.QTY的價值我的查詢回報(多)行。

TABLE A 
SALESNR ITEMNR LINENR 
100  B2001 1 
101  B2002 2 
102  A1021 3 

TABLE B 
LINENR COLOR QTY 
1  WHITE 3 
2  BLACK 1 
3  BROWN 8 

例如,用下面的查詢:

SELECT TABLE_A.SALESNR, TABLE_A.ITEMNR, TABLE_B.COLOR, TABLE_B.QTY 
FROM  TABLE_A INNER JOIN TABLE_B ON TABLE_B.LINENR = TABLE_A.LINENR 

我得到:

100 B2001 White 3 

我需要的是:

100 B2001 White 3 
100 B2001 White 3 
100 B2001 White 3 

有沒有辦法做到這個? 不能認爲正確的關鍵字谷歌如此...

日Thnx,

邁克

+0

嗨ypercube,yep我簡化了表格作爲例子,但由於加入亞麻布1 <-> 1我只得到一行。 –

回答

5

這將工作,只要數量小於2047

SELECT TABLE_A.SALESNR, TABLE_A.ITEMNR, TABLE_B.COLOR, TABLE_B.QTY 
FROM TABLE_A 
INNER JOIN TABLE_B ON TABLE_B.LINENR = TABLE_A.LINENR 
INNER JOIN master..spt_values ON type = 'P' AND number < TABLE_B.QTY 

使用本如果數量超過2047:

;WITH a AS 
(
SELECT TABLE_A.SALESNR, TABLE_A.ITEMNR, TABLE_B.COLOR, TABLE_B.QTY, 1 row 
FROM TABLE_A 
INNER JOIN TABLE_B ON TABLE_B.LINENR = TABLE_A.LINENR 
WHERE QTY > 0 
union all 
SELECT SALESNR, ITEMNR, COLOR, QTY, row+1 
FROM a 
WHERE QTY > row 
) 
SELECT SALESNR, ITEMNR, COLOR, QTY from a 
OPTION (MAXRECURSION 0) 
+0

黃油我的屁股,叫我餅乾;) 你是男人t-clausen,感謝一百萬! –

+0

@MikeDole我只是一個幸運的人,他首先發現了問題 –

0

如果您有一個交叉連接每個表格中的行,我將其解釋爲。如果可能的話,我會建議您重新設計您的數據模型以解決此問題 - 或者在您使用此數據的代碼中循環。

如果絕對需要,您可以在T-SQL中循環。

問候,歐萊

似乎無法評論其他人的帖子,只是想說,很好的解決方案,以t-clausen.dk!