如何写这个观点
我有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
谢谢大家 标记请更正你的答案,所以我可以标记你
尝试:
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
(假定您要包括客户没有订单 - 改变左连接到内部联接,如果你想只包括客户订单)。
差不多有 我得到和操作数的数据类型比特错误invalis对和运算 – maggie 2011-12-27 20:08:03
创建视图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
按照评论修正。我目前无法访问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;
这不会显示每个客户的订单数量,也不会显示没有任何订单的客户 – 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
这个展示只有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
你怎么打算将两个表关联?客户表是否有一个customerid列? – 2011-12-27 19:27:38
我编辑了问题 – maggie 2011-12-27 19:39:50