sql - Oracle - 查询以根据其他 ID 填充虚拟数据
问题描述
我有一个表 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 的信息?我正在寻找可以完成此任务的查询/存储过程。
谢谢你。
解决方案
您可以使用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);
推荐阅读
- php - 如何在php mysql中显示商店名称而不是分支名称
- c# - Application.SetCompatibleTextRenderingDefault(false); 时出现运行时错误 已设置
- python - 如何使用 numpy 创建一个二维范围数组
- google-cloud-platform - 数据流模板 Cloud Pub/Sub 主题与订阅 BigQuery
- python - 使用 SciPy curve_fit 预测最终得分
- powershell - 用于 Invoke-RestMethod 的 JSON 对象中的变量扩展
- pandas - 按级别划分多索引数据
- c# - 在 AutoMapper 投影中创建 Linq 表达式以将 int 转换为枚举名称
- java - Java/Slf4J:单个类的自定义日志记录?
- python - Tweepy 在尝试按 ID 检索推文时给出错误