如何写这个观点

如何写这个观点

问题描述:

我有2个表如何写这个观点

客户

customerid  
customername 

订单

customerid 
orderid 
isopen [true/false] 

如何创建将包含以下视图:

顾客名称,总订单,总订单在那里ISOPEN列==真

*更新**

create view CustomerOrders as 
select c.id CustomerID, 
     max(c.customername) CustomerName, 
     count(o.order_id) CustomerOrders, 
     SUM(CASE WHEN o.isopen = 1 THEN 1 ELSE 0 END) AS OpenOrders 
from customer c 
left join orders o on c.id = o.customerid 
group by c.id 

谢谢大家 标记请更正你的答案,所以我可以标记你

+2

你怎么打算将两个表关联?客户表是否有一个customerid列? – 2011-12-27 19:27:38

+0

我编辑了问题 – maggie 2011-12-27 19:39:50

尝试:

create view CustomerOrders as 
select c.customerid CustomerID, 
     max(c.customername) CustomerName, 
     count(o.order_id) CustomerOrders, 
     SUM(CASE WHEN o.isopen = 1 THEN 1 ELSE 0 END) OpenOrders 
from customer c 
left join orders o on c.customerid = o.customerid 
group by c.id 

(假定您要包括客户没有订单 - 改变左连接到内部联接,如果你想只包括客户订单)。

+0

差不多有 我得到和操作数的数据类型比特错误invalis对和运算 – maggie 2011-12-27 20:08:03

+0

创建视图CustomerOrders作为 选择c.id客户ID, MAX(c.customername)客户名称, 计数(o.order_id)CustomerOrders, SUM(CASE WHEN o.isopen = 1 THEN 1 ELSE 0 END)作为OpenOrders 从客户c 左加入订单o在c.id = o.customerid 组c.idTrue1 – maggie 2011-12-27 20:11:25

+0

按照评论修正。我目前无法访问MySQL,但认为过去我已成功汇总了位数据类型列 - 可能这在不同版本的MySQL之间有所不同? – 2011-12-27 20:22:59

您不能这样做,直到您拥有customerid属性和客户名称。他们不会链接,否则

试试下面给出的语法

Create View OpenOrders AS 
     SELECT CUSTOMERNAME, count(ORDERID) FROM CUSTOMER INNER JOIN ORDERS 
       CUSTOMER.CUSTOMERID = ORDERS.CUSTOMERID 
     WHERE ORDERS.ISOPEN =1; 
+0

这不会显示每个客户的订单数量,也不会显示没有任何订单的客户 – 2011-12-27 19:31:29

尝试用:

CREATE VIEW v1 AS 
    SELECT customername, count(orderid) as total_orders 
    FROM customer c 
    LEFT JOIN orders o ON (c.id = o.customerid AND o.isopen = TRUE) 
    GROUP BY c.id 
+0

这个展示只有is.open,我也需要总订单 – maggie 2011-12-27 19:46:29

这将是这样的,这取决于表定义的细节(这你不”吨存在):

create view viewname as 
select c.customername, count(o.*) as totalorders 
    from customer c, orders o 
    where c.customerid = o.customerid and o.isopen