你可以做到這一點作爲一個遞歸與 - 子句(又名遞歸CTE),如下所示:
WITH main_data (idnum, NAME, NUM, highrange, notes) AS (SELECT idnum,
NAME,
lowrange NUM,
highrange,
notes
FROM sample_data
UNION ALL
SELECT idnum,
NAME,
NUM + 1 NUM,
highrange,
notes
FROM main_data
WHERE NUM < highrange)
SELECT idnum,
NAME,
NUM,
notes
FROM main_data
ORDER BY idnum, NUM;
IDNUM NAME NUM NOTES
---------- ----- ---------- -----
123 TESTS 100 Hello
123 TESTS 101 Hello
123 TESTS 102 Hello
123 TESTS 103 Hello
124 TEST2 200
124 TEST2 201
124 TEST2 202
124 TEST2 203
124 TEST2 204
125 TESTS 150 Hello
125 TESTS 151 Hello
125 TESTS 152 Hello
125 TESTS 153 Hello
125 TESTS 154 Hello
125 TESTS 155 Hello
125 TESTS 156 Hello
125 TESTS 157 Hello
125 TESTS 158 Hello
125 TESTS 159 Hello
125 TESTS 160 Hello
上面的查詢在Oracle中工作(我相信
SELECT 123 idnum, 'TESTS' NAME, 100 lowrange, 103 highrange, 'Hello' notes FROM dual UNION ALL
SELECT 124 idnum, 'TEST2' NAME, 200 lowrange, 204 highrange, NULL notes FROM dual UNION ALL
SELECT 125 idnum, 'TESTS' NAME, 150 lowrange, 160 highrange, 'Hello' notes FROM dual
這是超級簡單的使用理貨表。 http://www.sqlservercentral.com/articles/T-SQL/62867/這適用於Oracle以及sql服務器(儘管您必須構建它有點不同)。然後,您從您的表中選擇並加入您的理貨表,其中tally.N> = LowRange和tally.N <= HighRange。 –
看起來好像是一個Numbers表格(只是一個列中有整數的表格)。加入> = LowRange和<= HighRange。 –