2

可能重复:
从表中多次选择记录

我想让我的查询为 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

有没有办法做到这一点?想不出合适的关键词来谷歌这个......

谢谢,

麦克风

4

2 回答 2

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) 
于 2012-09-26T07:33:06.537 回答
0

如果每个表中有一行,我将其解释为,交叉连接将不会执行此操作。如果可能的话,我建议重新设计你的数据模型来解决这个问题——或者在你使用这些数据的代码中循环。

如果绝对需要,您可以在 T-SQL 中循环。

问候, Olle

似乎无法评论其他人的帖子,只想对 t-clausen.dk 说,不错的解决方案!

于 2012-09-26T07:34:07.100 回答