Oracle - Запрос на заполнение фиктивных данных на основе других идентификаторов - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть таблица A с 1 миллионом различных идентификаторов.

+---------+
|   ID    |
+---------+
| 1       |
| 2       |
| 3       |
| 4       |
| 5       |
| .       |
| .       |
| 1000000 |
+---------+

У меня есть другая таблица B, в которой содержится информация о некоторых идентификаторах (около 200) в следующем формате. У меня есть несколько мер (показано только 2)

+----+---------+--------+-------+
| ID | Measure | Month  | Value |
+----+---------+--------+-------+
|  1 | loss    | 1      | 200   |
|  1 | loss    | 2      | 180   |
|  1 | loss    | 3      | 250   |
|  1 | .       | .      | .     |
|  1 | .       | .      | .     |
|  1 | Balance | 1      | 100   |
|  1 | Balance | 2      | 140   |
|  1 | Balance | 3      | 500   |
|  1 | .       | .      | .     |
|  1 | .       | .      | .     |
|  2 | loss    | 1      | 140   |
|  2 | loss    | 2      | 300   |
|  2 | loss    | 3      | 250   |
|  2 | .       | .      | .     |
|  2 | .       | .      | .     |
|  2 | Balance | 1      | 500   |
|  2 | Balance | 2      | 210   |
|  2 | Balance | 3      | 330   |
|  2 | .       | .      | .     |
|  2 | .       | .      | .     |
+----+---------+--------+-------+

Как я могу масштабировать таблицу B с фиктивными данными (для столбцов меры, месяца и значения), чтобы получить информацию обо всех 1 миллионах идентификаторов в A in Oracle? Я ищу запрос / хранимую процедуру, которая может выполнить sh эту задачу.

Спасибо.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать join. Вот один из методов - предполагая, что идентификаторы являются непрерывными без пробелов:

select a.id, b.*
from a join
     (select b.*, count(distinct id) over () as num_ids
      from b
     ) b
     on mod(a.id, b.num_ids) = mod(b.id, b.num_ids);

Если вы не можете гарантировать, что идентификаторы являются непрерывными:

select a.id, b.*
from (select a.*, row_number() over (order by id) as seqnum
      from a
     ) a join
     (select b.*, count(distinct id) over () as num_ids,
             dense_rank() over (order by id) as seqnum
      from b
     ) b
     on mod(a.seqnum, b.num_ids) = mod(b.seqnum, b.num_ids);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...