【问题标题】:Oracle - Query to populate dummy data based on other IDsOracle - 查询以根据其他 ID 填充虚拟数据
【发布时间】:2020-02-10 18:42:03
【问题描述】:

我有一个表 A,它有 100 万个不同的 ID。

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

我有另一个表 B,其中包含以下格式的一些 ID(大约 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,以获取有关 Oracle 中 A 中所有 100 万个 ID 的信息? 我正在寻找可以完成此任务的查询/存储过程。

谢谢。

【问题讨论】:

    标签: sql oracle stored-procedures


    【解决方案1】:

    您可以使用join。这是一种方法——假设 id 是连续的,没有间隙:

    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);
    

    如果你不能保证 id 是连续的:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2013-05-11
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多