2011-12-27 4 views
1

У меня есть 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? –

+0

я отредактировал вопрос – maggie

ответ

1

Try:

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

+0

создавать видовые CustomerOrders, как выбрать c.id КодКлиента, макс (c.customername) CustomerName, отсчет (o.order_id) CustomerOrders, SUM (CASE WHEN o.isopen = 1 THEN 1 ELSE 0 END) AS OpenOrders от клиента c заказы на объединение влево o на c.id = o.customerid группа по c.idTrue1 – maggie

+0

Изменена в соответствии с комментарием. У меня нет доступа к MySQL на данный момент, но я думал, что я успешно суммировал столбцы столбцов данных в прошлом - возможно, это зависит от версий MySQL? –

0

вы не можете этого сделать, пока у вас нет атрибута customerid вместе с customername. они не будут связывать иначе

1

Постарайся ниже приведены синтаксис

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

, это не покажет количество заказов для каждого клиента, а также не покажет клиентам, у которых нет заказов –

2

Попробуйте с:

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

0

Это будет что-то вроде этого, в зависимости от специфики определения таблиц (которые вы не» т присутствует):

create view viewname as 
select c.customername, count(o.*) as totalorders 
    from customer c, orders o 
    where c.customerid = o.customerid and o.isopen 
Смежные вопросы