Mik*_*ole 2 sql t-sql sql-server sql-server-2008
可能重复:
从表中多次选择记录
我希望我的查询返回(多个)行为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
Run Code Online (Sandbox Code Playgroud)
例如,使用以下查询:
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
Run Code Online (Sandbox Code Playgroud)
我明白了:
100 B2001 White 3
Run Code Online (Sandbox Code Playgroud)
我需要的是:
100 B2001 White 3
100 B2001 White 3
100 B2001 White 3
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?想不出谷歌这个合适的关键词......
日Thnx,
麦克风
只要数量小于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
Run Code Online (Sandbox Code Playgroud)
如果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)
Run Code Online (Sandbox Code Playgroud)