2012-09-26 32 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!