2017-04-17 95 views
0

好拉的信息,所以我有两个表:MYSQL,创建一个视图,并从两个表

hscust和hssales_rep

我需要创建一个视图,显示我代表FNAME和LNAME(以及客户),并显示客户有多少信贷余额结束。

这是我的代码:

CREATE VIEW OverLimit AS 
SELECT 
    CONCAT(hssales_rep.last,hssales_rep.first) AS Rep,  
    CONCAT(hscust.last,hscust.first) AS Cust, 
    SUM(credit_limit - balance) 
FROM hscust 
INNER JOIN hssales_rep ON hscust.sales_rep = hssales_rep.repid 

并返回一个空的结果。

任何帮助,非常感谢!

salesrep table cust table

+0

您可以共享任何示例数据? –

+0

我添加了我正在处理的问题 –

+0

您的声明似乎工作。你确实需要在** create table **中提供样本数据,然后是**'insert into'**陈述方式,而不是图片格式),以便我们可以**重现**问题。 –

回答

0

一个CREATE VIEW语句不返回一个结果。

A SELECT语句可以返回一个空的结果集。但是我们希望视图定义中的SELECT语句返回一行,或者抛出一个错误。

我建议你稍微分解一下。

1)CREATE VIEW声明正在解决什么问题。你为什么需要一个观点?

2)在编写CREATE VIEW声明之前,首先开发并测试返回所需结果集的语句SELECT。在之前做你把它放到视图定义中。

我也强烈建议您在SELECT语句中限定全部列引用,或者使用表名或(最好)短表别名。

如果你想返回每个Cust一排在你的SELECT列表中的聚合函数(例如SUM),再加入适当的GROUP BY条款您SELECT声明。

目前尚不清楚为什么我们想要使用SUM聚合函数。

“credit_limit”和“balance”之间的差异是可用(剩余)信用。负值表示余额超过了信用额度。

SELECT CONCAT(r.last,r.first)  AS Rep 
    , CONCAT(c.last,c.first)  AS Cust 
    , c.credit_limit - c.balance AS available_credit 
    FROM hscust c 
    JOIN hssales_rep r 
    ON c.sales_rep=r.repid 
ORDER 
    BY CONCAT(r.last,r.first) 
    , CONCAT(c.last,c.first) 
    , c.custid 

如果我们只想为超出信用额度的客户返回行,我们可以添加一个WHERE子句。

SELECT CONCAT(r.last,r.first)  AS Rep 
    , CONCAT(c.last,c.first)  AS Cust 
    , c.credit_limit - c.balance AS available_credit 
    FROM hscust c 
    JOIN hssales_rep r 
    ON c.sales_rep=r.repid 
WHERE c.credit_limit - c.balance < 0 
ORDER 
    BY CONCAT(r.last,r.first) 
    , CONCAT(c.last,c.first) 
    , c.custid 

再次得到SELECT声明工作(返回结果集所需的),你把它包在一个CREATE VIEW之前

+0

哦,我明白了!我现在明白了,非常感谢! –