我希望我的查询返回(多个)行,以获取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 :(得分: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
如果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)
答案 1 :(得分:0)
如果每个表中都有一行,那么交叉连接将不会这样做,我将其解释为。如果可能的话,我建议重新设计你的数据模型来解决这个问题 - 或者在你使用这些数据的代码中循环。
如果绝对需要,你可以循环使用T-SQL。
问候,Olle
似乎无法评论其他人的帖子,只是想说,好的解决方案,t-clausen.dk!