创建 ORACLE 查询 - 查看并使用默认值合并
Create an ORACLE query - View and union with default value
对于特定需求,我想通过合并多个 table 中的数据并默认添加数据来创建视图。
更多详情:
我的数据库中有 3 个 table:
table 合同(id_contract,姓名)
table 个投资组合(id_pfo,标签)
一个链接 table "contract_Linked_pfo" (id_contract, id_pfo, 预算)
对于每个合约,可以添加一个或多个具有特定预算的投资组合(在链接 table 中可见)。
合约(来自合约 table)可能不包含投资组合。因此,该合约不存在于链接 table
中
我需要创建一个视图以生成一个 table 包含:
来自链接 table 的行和链接到所有投资组合的所有行(对于其他合约)以获得例如:
来自链接的行 table
id_contract: 1 - id_portfolio: 1 - value:500
id_contract: 1 - id_portfolio: 2 - value:1500
id_contract: 2 - id_portfolio: 1 - value:1000
id_contract: 2 - id_portfolio: 2 - value:3000
id_contract: 3 - id_portfolio: 1 - value:5000
以及另一个案例中的台词
id_contract: 3 - id_portfolio: 2 - value:0
id_contract: 4 - id_portfolio: 1 - value:0
id_contract: 4 - id_portfolio: 2 - value:0
id_contract: 5 - id_portfolio: 1 - value:0
id_contract: 5 - id_portfolio: 2 - value:0
我不知道在oracle中怎么写。
我知道创建视图的代码和查询的第一步。在我认为我必须对查询的第二部分执行 UNION 之后。
尽管如此,我不知道第二部分该怎么做(为每个预算默认值为 0 的投资组合添加链接 table 中不存在的每个合约的行)
你能帮我做一下吗?
非常感谢,
塞布
如果我没理解错的话,你想要 all 合约和投资组合的组合,无论组合是否存在于 link table 中?如果 link table 中存在组合,则显示 link 中的预算值,否则显示零作为预算值?
然后你可以用 CROSS JOIN
代替 UNION ALL
来获得所有可能的组合,然后你 LEFT OUTER JOIN
到 link table。像这样:
select c.id_contract
, p.id_pfo
, nvl(l.budget,0) value
from contracts c
cross join portfolios p
left outer join "contract_Linked_pfo" l
on l.id_contract = c.id_contract
and l.id_pfo = p.id_pfo
;
(我假设您的 link table 是大小写混合标识符,因为您在问题中是这样写的。如果不是这种情况,请删除引号 ;-)
对于特定需求,我想通过合并多个 table 中的数据并默认添加数据来创建视图。
更多详情:
我的数据库中有 3 个 table:
table 合同(id_contract,姓名)
table 个投资组合(id_pfo,标签)
一个链接 table "contract_Linked_pfo" (id_contract, id_pfo, 预算)
对于每个合约,可以添加一个或多个具有特定预算的投资组合(在链接 table 中可见)。
合约(来自合约 table)可能不包含投资组合。因此,该合约不存在于链接 table
中我需要创建一个视图以生成一个 table 包含:
来自链接 table 的行和链接到所有投资组合的所有行(对于其他合约)以获得例如:
来自链接的行 table
id_contract: 1 - id_portfolio: 1 - value:500
id_contract: 1 - id_portfolio: 2 - value:1500
id_contract: 2 - id_portfolio: 1 - value:1000
id_contract: 2 - id_portfolio: 2 - value:3000
id_contract: 3 - id_portfolio: 1 - value:5000
以及另一个案例中的台词
id_contract: 3 - id_portfolio: 2 - value:0
id_contract: 4 - id_portfolio: 1 - value:0
id_contract: 4 - id_portfolio: 2 - value:0
id_contract: 5 - id_portfolio: 1 - value:0
id_contract: 5 - id_portfolio: 2 - value:0
我不知道在oracle中怎么写。 我知道创建视图的代码和查询的第一步。在我认为我必须对查询的第二部分执行 UNION 之后。
尽管如此,我不知道第二部分该怎么做(为每个预算默认值为 0 的投资组合添加链接 table 中不存在的每个合约的行)
你能帮我做一下吗?
非常感谢,
塞布
如果我没理解错的话,你想要 all 合约和投资组合的组合,无论组合是否存在于 link table 中?如果 link table 中存在组合,则显示 link 中的预算值,否则显示零作为预算值?
然后你可以用 CROSS JOIN
代替 UNION ALL
来获得所有可能的组合,然后你 LEFT OUTER JOIN
到 link table。像这样:
select c.id_contract
, p.id_pfo
, nvl(l.budget,0) value
from contracts c
cross join portfolios p
left outer join "contract_Linked_pfo" l
on l.id_contract = c.id_contract
and l.id_pfo = p.id_pfo
;
(我假设您的 link table 是大小写混合标识符,因为您在问题中是这样写的。如果不是这种情况,请删除引号 ;-)