sql - 试图从另一个视图创建一个视图?甲骨文顶点
问题描述
我有一个任务,我一直在尝试解决,但我做不到
第一个问题是“1. 创建一个视图 VE1,它将 customer_id、cust_title 和每个客户的总金额。” 所以我创建了第一个视图
CREATE OR REPLACE FORCE VIEW "VE_1" ("CUST_ID", "CUST_TITLE", "TOTAL_AMOUNT") AS
SELECT Customer.cust_id,customer.cust_title,
SUM(lead.amount) AS Total_amount
FROM customer,lead
WHERE customer.cust_id=lead.cust_id
GROUP BY customer.cust_id,customer.cust_title
ORDER BY customer.cust_id
/
所以在我创建了视图一之后(我不确定它是否是正确的答案)。这个问题二是我发布这个问题的主要原因“您想要与 1 中相同的组结果,但仅适用于总金额超过 25,000(HAVING)的客户。您可以使用来自 VE1 的连续视图 VE2 来做到这一点,如果不是为什么?如果不能像新视图 VE3 一样连续执行它。所以我尝试了这段代码
CREATE OR REPLACE FORCE VIEW "VE_2" ("CUST_ID", "CUST_TITLE", "TOTAL_AMOUNT") AS
SELECT VE_1.cust_id,VE_1.cust_title,
SUM(lead.amount) AS Total_amount
FROM VE_2
WHERE customer.cust_id=lead.cust_id
GROUP BY customer.cust_id,customer.cust_title
HAVING
count( amount ) > 25000
ORDER BY customer.cust_id
/
它说“编译失败,第 0 行(17:14:40)ORA-01731:遇到圆形视图定义”
请帮忙!
解决方案
您收到错误消息,因为您正试图从即将创建的视图中进行选择。此外,您指customer
的是子句lead
中未介绍的和。FROM
所以那也一定会失败。
您几乎可以将所有语句重复用于第一个视图以获得第二个视图。只需添加一个HAVING
子句。
CREATE
OR REPLACE VIEW ve_2
(cust_id,
cust_title,
total_amount)
AS
SELECT customer.cust_id,
customer.cust_title,
sum(lead.amount) AS total_amount
FROM customer
INNER JOIN lead
ON customer.cust_id = lead.cust_id
GROUP BY customer.cust_id,
customer.cust_title
HAVING sum(lead.amount) > 25000;
您还可以使用第一个视图创建第二个视图。但是HAVING
在这里您需要使用WHERE
子句而不是子句,因为数据已经聚合。
CREATE
OR REPLACE VIEW ve_2
(cust_id,
cust_title,
total_amount)
AS
SELECT ve_1.cust_id,
ve_1.cust_title,
ve_1.total_amount
FROM ve_1
WHERE ve_1.total_amount > 25000;
推荐阅读
- javascript - 带有隐藏 div 的 HTML 损坏格式
- python - 如何模拟使用别名导入的函数?
- python - 列/索引的熊猫样式 set_table_styles 不适用于 to_excel
- html - CSS类不应用样式
- node.js - 运行 docker 容器时未找到 npm 命令错误
- python - 使用来自 2 个数据框的列制作箱线图 [python seaborn]
- c - 检查字符串是否包含特定数量的给定值
- python - 如何聚合熊猫数据框中的行
- android - 读取 Android 手机的实际 txPower
- parse-platform - 如果不存在,则解析模式添加字段