【发布时间】:2019-06-09 23:44:06
【问题描述】:
我正在尝试从现有视图数据创建视图,但如果每个部件/日期组合中不存在某些行,则创建这些行。我有以下查询,显示了我目前对特定 s_date/part_no 组合的了解:
SELECT
s_date,
part_no,
issue_group,
s_level,
qty_filled
FROM
current_view
WHERE
part_no = 'xxxxx'
AND s_date IN (
'201802',
'201803'
)
ORDER BY
s_date,
part_no,
issue_group,
DECODE(s_level, '80', 1, '100', 2, 'Late', 3)
这会产生以下内容:
我知道如何使用这些数据创建视图,这很容易。但我需要的是每个issue_group and s_level 组合的一行,如果它是创建的行,则将 0 作为qty_filled。
每个 part_no / s_date 组合应该有 6 行与之配套
- issue_group = '1' / s_level = '80'
- issue_group = '1' / s_level = '100'
- issue_group = '1' / s_level = 'Late'
- issue_group = '2/3 ' / s_level = '80'
- issue_group = '2/3 ' / s_level = '100'
- issue_group = '2/3 ' / s_level = 'Late'
因此,如果当前s_date/part_no 已经存在上述组合之一,那么它显然会从当前视图中获取qty_filled 信息。如果没有,则创建一个新行,并qty_filled = 0。所以我试图让它看起来像这样:
我只展示了一个部分,有几个日期,只是为了让大家明白这一点。表中有 10k+ 个部分,6 个 issue_group/s_level 组合中的每一个都不会超过 1 个部分/日期组合。
【问题讨论】:
-
提取唯一的 issue_group 和 s_level 组合并
LEFT JOIN将其添加到您的查询中。 -
@PM77-1 但我目前只有一张桌子,那它是如何工作的?还是我必须首先使用每个 issue_group 和 s_level 组合创建该表/视图,然后再进行连接?
-
编写一个查询以产生唯一的组合并将其结果用于
JOIN。 -
您好@PM77-1,请用您正在使用的 RDBMS 标记您的问题:oracle、mysql、sql-server...?
-
@GMB 对不起,我以为我在标签中添加了 RDBMS ......但它是 Oracle。
标签: sql oracle create-table insert-into create-view