Объединить два запроса в один столбец, чтобы выбрать вишню - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть две таблицы, одна из которых называется customer_sales, а другая Different_customers.

Этот запрос возвращает общее количество продаж по d_id и номеру клиента (но не имеет имени клиента)

select cs.d_id, cs.customer_number, cs.total_sales from cs_sales cs where cs.d_id = 'A00007';

Этот запрос возвращает информацию о клиенте (включая имя) из d_id

select  dc.c_name, dc.c_number, dc.d_name from dcust dc where d_id ='A00007';

Я хочу объединить оба запроса, чтобы я мог получить что-то вроде этого

|-------|--------|-----------|-------------|
|d_id   | c_name |   d_name  | total_sales |
|-------|--------|-----------|-------------|

Каков наилучший способ сделать это? Я пробовал разные способы, и я продолжаю получать дублированную информацию обратно.

Образцы данных о различных клиентах

enter image description here

Образцы данных о клиентских продажах

enter image description here

Ответы [ 4 ]

1 голос
/ 01 декабря 2019

Вы также должны присоединиться к customer_number:

SELECT cs.d_id, dc.c_name, dc.d_name, cs.total_sales
FROM cs_sales cs INNER JOIN dcust dc
ON cs.d_id = dc.d_id AND dc.customer_number = cs.customer
WHERE cs.d_id ='A00007'
0 голосов
/ 01 декабря 2019

Очень странно, что у вас есть идентификатор дилера в обеих таблицах. Исходя из названий, я подозреваю, что вы хотите присоединиться только к клиенту, а не к дилеру:

SELECT cs.d_id, c.c_name, c.d_name, cs.total_sales
FROM cs_sales cs INNER JOIN
     dcust c
     USING (c.customer_number) 
WHERE cs.d_id = 'A00007';

Я интерпретирую cs.d_id как что-то вроде «дилерского центра, в котором клиент подписался». Я не понимаю, почему это должно быть так же, как и в случае фактической продажи. Итак, если вы хотите продажи у данного дилера, используйте информацию о дилере из cs_sales.

Если столбец избыточен, то вам следует исправить свою модель данных, чтобы столбец былне повторяется для двух таблиц.

0 голосов
/ 01 декабря 2019

Приведенный ниже код должен выполнить работу:

SELECT cs.d_id, dc.c_name, dc.d_name, SUM(cs.total_sales)
FROM cs_sales cs
LEFT JOIN dcust dc
ON cs.d_id=dc.d_id
GROUP BY cs.d_id, dc.c_name, dc.d_name
0 голосов
/ 01 декабря 2019

Вам просто нужно присоединиться к столам:

select cs.d_id, dc.c_name, dc.d_name, cs.total_sales
from dcust d inner join cs_sales cs 
on d.d_id = cs.d_id
where d_id = 'A00007'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...