SQL класс запросов c база данных моделей - PullRequest
0 голосов
/ 07 мая 2020

Сообщать количество отложенных заказов для каждого клиента

SELECT customerName , count(*) As 'Orders on Hold'
FROM customers
INNER JOIN orders
ON customers.customerNumber = orders.customerNumber
WHERE orders.status = 'On Hold'
GROUP BY customerName;

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

Заказы: Статус номера клиента

Клиенты: Номер клиента Имя клиента

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Работает ли это:

create table customers
(
  customerNumber int,
  customerName varchar(50)
); 

create table orders
(
  orderNumber int,
  status varchar(10),
  customerNumber int
);

insert into customers values(1, 'A');
insert into customers values(2, 'B');

insert into orders values(101, 'Active', 1);
insert into orders values(102, 'On Hold', 1);
insert into orders values(103, 'On Hold', 1);

SELECT 
    customers.customerNumber, 
    count(orders.customerNumber) as 'Orders On Hold'
FROM
    customers
LEFT JOIN orders ON 
    customers.customerNumber = orders.customerNumber
    and orders.status = 'On Hold'
GROUP BY customers.customerNumber

Возвращает:

customerNumber     Orders On Hold
==============     ==============
1                  2
2                  0
0 голосов
/ 07 мая 2020

Обновлено по новому запросу

SELECT C.customerName , sum(CASE WHEN O.status = 'On Hold' THEN 1 ELSE 0 END) As 'Orders on Hold', COUNT(O.orderNumber) as 'Total Orders'
FROM customers AS C
INNER JOIN orders AS O ON C.customerNumber = O.customerNumber
GROUP BY C.customerName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...