当值>时,如何获得多行? 1

时间:2012-09-26 07:18:32

标签: sql sql-server sql-server-2008 tsql

  

可能重复:
  Select Records multiple times from table

我希望我的查询返回(多个)行,以获取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,

麦克

2 个答案:

答案 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!