#sql-server
Вопрос:
Я пытаюсь собрать результат 2 запросов в один результирующий набор. Я использую SQL Server 2019 Express.
Вот данные, с которыми я работаю:
Стол Sales
Распродажа | Распродажа | Идентификатор клиента |
---|---|---|
11/1/2021 | 500 | 123 |
11/1/2021 | 100 | 234 |
11/1/2021 | 300 | 345 |
11/2/2021 | 500 | 456 |
11/2/2021 | 100 | 567 |
11/2/2021 | 200 | 678 |
Стол Customers
Идентификатор клиента | Имя пользователя |
---|---|
123 | Джон Доу |
234 | Джейн Доу |
456 | Боб Доу |
678 | Джим Доу |
Запрос № 1:
select sales.saledate, sum(sales.saleamt) as 'Total Sales from All' from Sales group by sales.saledate
Запрос № 2:
select sales.saledate, sum(sales.saleamt) as 'Total Sales from Customers' from Sales where sales.customerid in (select customerid from customers) group by sales.saledate
Это мой желаемый результат:
Распродажа | Общий объем продаж от всех | Общий объем продаж от Клиентов |
---|---|---|
11/1/2021 | 900 | 600 |
11/2/2021 | 800 | 700 |
Ответ №1:
вы можете использовать присоединиться в день продажи
select s1.saledate, All_Total AS 'Total Sales from All', CustomersTotal as 'Total Sales from Customers' from ( select sales.saledate, sum(sales.saleamt) as All_Total from Sales group by sales.saledate ) s1 inner join ( select sales.saledate, sum(sales.saleamt) as CustomersTotal from Sales where sales.customerid in (select customerid from customers) group by sales.saledate ) s2 on s1.saledate = s2.saledate
Ответ №2:
вы можете объединить его в один запрос с помощью case
выражения.
select s.saledate, sum(s.saleamt) as [Total Sales from All], sum(case when exists ( select * from customers c where c.customerid = s.customerid ) then s.salesamt end) as [Total Sales from Customers] from Sales s group by s.saledate
Ответ №3:
Вы можете использовать a LEFT JOIN
с условной агрегацией
select s.saledate, sum(s.saleamt) as [Total Sales from All], sum(case when c.customerid is not null then s.saleamt end) as [Total Sales from Customers] from Sales s left join customers c on s.customerid = c.customerid group by s.saledate;