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

これを行う方法はありますか?これを Google で検索するのに適切なキーワードが思い浮かびません...

ありがとう

マイク

4

2 に答える 2

5

これは、QTY が 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) 
于 2012-09-26T07:33:06.537 に答える
0

各テーブルに1行ある場合、クロス結合は機能しません。これは私が解釈するものです。可能であれば、データモデルを再設計してこれを解決するか、このデータを使用するコードをループすることをお勧めします。

絶対に必要な場合は、T-SQL をループできます。

よろしく、 オーレ

t-clausen.dk に良い解決策を言いたかっただけです。

于 2012-09-26T07:34:07.100 に答える