Sql &引用;ORA-00998:必须使用列别名命名此表达式;我犯了这个错误,谁能告诉我是什么';问题和解决办法是什么
这是我的示例代码-Sql &引用;ORA-00998:必须使用列别名命名此表达式;我犯了这个错误,谁能告诉我是什么';问题和解决办法是什么,sql,oracle,Sql,Oracle,这是我的示例代码- CREATE TABLE orders ( ord_no int, purch_amt float, ord_date varchar(50), customer_id int, salesman_id int, PRIMARY KEY(ord_no) ); INSERT INTO orders (ord_no, purch_amt, ord_date, customer_id, salesman_id) VALUES (70001, 150.5, '2012-10-05
CREATE TABLE orders
(
ord_no int,
purch_amt float,
ord_date varchar(50),
customer_id int,
salesman_id int,
PRIMARY KEY(ord_no)
);
INSERT INTO orders (ord_no, purch_amt, ord_date, customer_id, salesman_id)
VALUES (70001, 150.5, '2012-10-05', 3005, 5002);
CREATE VIEW totalforday
AS SELECT ord_date , COUNT(DISTINCT customer_id),
AVG(purch_amt), SUM(purch_amt)
FROM orders
GROUP BY ord_date;
想象一下为新视图编写一个查询
SELECT ord_date,
COUNT(DISTINCT customer_id),
AVG(purch_amt),
SUM(purch_amt)
FROM totalforday;
您的列名-您是在要求一个名为SUM(purch_amt)的列,还是在尝试对一个名为purch_amt的列进行求和
您需要隐式或显式地为视图提供有效的列名。添加别名允许数据库隐式地确定列的名称
像这样
CREATE or replace VIEW totalforday
AS SELECT ord_date , COUNT(DISTINCT customer_id) how_many_customers,
AVG(purch_amt) avg_amt, SUM(purch_amt) total_amt
FROM orders
GROUP BY ord_date;
说:
如果省略[view]别名,则数据库将从查询中的列或列别名中派生它们。因此,如果查询包含表达式而不是列名,则必须使用别名
因此,如果视图定义不包含视图本身的列/别名列表,则必须在查询中提供它们,如@Jeff所示:
CREATE OR REPLACE VIEW totalforday
AS
SELECT ord_date,
COUNT(DISTINCT customer_id) AS count_customers,
AVG(purch_amt) AS avg_purch_amt,
SUM(purch_amt) AS sum_purch_amt
FROM orders
GROUP BY ord_date;
describe totalforday
Name Null? Type
--------------- ----- ------
ORD_DATE DATE
COUNT_CUSTOMERS NUMBER
AVG_PURCH_AMT NUMBER
SUM_PURCH_AMT NUMBER
另一种方法是显式指定视图的列名:
CREATE OR REPLACE VIEW totalforday
(ord_date, count_customers, avg_purch_amt, sum_purch_amt)
AS
SELECT ord_date,
COUNT(DISTINCT customer_id),
AVG(purch_amt),
SUM(purch_amt)
FROM orders
GROUP BY ord_date;
describe totalforday
Name Null? Type
--------------- ----- ------
ORD_DATE DATE
COUNT_CUSTOMERS NUMBER
AVG_PURCH_AMT NUMBER
SUM_PURCH_AMT NUMBER
查询仍然可以包含列和列表达式的别名,如果您希望独立运行该查询,这会很有帮助,但视图会忽略这些别名-仍然使用显式名称/别名:
CREATE OR REPLACE VIEW totalforday
(ord_date, count_customers, avg_purch_amt, sum_purch_amt)
AS
SELECT ord_date AS ignored_1,
COUNT(DISTINCT customer_id) AS ignored_2,
AVG(purch_amt) AS ignored_3,
SUM(purch_amt) AS ignored_4
FROM orders
GROUP BY ord_date;
describe totalforday
Name Null? Type
--------------- ----- ------
ORD_DATE DATE
COUNT_CUSTOMERS NUMBER
AVG_PURCH_AMT NUMBER
SUM_PURCH_AMT NUMBER
来自MySQL的Oracle错误。。。将标记替换为。您必须在“创建”视图中命名“选择”列。例如,
COUNT(DISTINCT customer\u id)cust\u cnt
。这是Oracle更清晰的错误消息之一*8-)它在工作,但我怀疑,每当我必须创建视图时,是否有必要进行此计数(DISTINCT customer\u id)多少客户,平均(purch\u amt)平均金额,总和(purch\u amt)总计这是一个完全不同的问题,为了帮助您做到这一点,我们需要更多地了解您正在构建的视图需求背后的业务需求