Как отобразить данные с помощью SQL Join - PullRequest
0 голосов
/ 24 мая 2018

Привет всем, я хочу попросить о помощи в моем случае.

Основные данные первой таблицы

id  | barcode       | product_name         | unit_kg |
====+===============+======================+=========+===
1   | 8995157800257 | Pandan Wangi CF 5kg  | 5       |
2   | 8995157800264 | Pandan Wangi CF 10kg | 10      |
3   | 8995157800271 | Pandan Wangi CF 20kg | 20      |
4   | 8995157800288 | Rojolele CF 5kg      | 5       |
5   | 8995157800301 | Rojolele CF 20kg     | 20      |
6   | 8995157800318 | SR CF 5kg            | 5       |
7   | 8995157800325 | SR CF 10kg           | 10      |
8   | 8995157800332 | SR CF 20kg           | 20      |

Данные второй таблицы detail_order

id  | barcode       | product_name         | pcs_order | date_order |
====+===============+======================+=========+==============+==
1   | 8995157800257 | Pandan Wangi CF 5kg  | 5         | 2018-01-01
2   | 8995157800257 | Pandan Wangi CF 5kg  | 2         | 2018-01-05
3   | 8995157800257 | Pandan Wangi CF 5kg  | 6         | 2018-02-01
4   | 8995157800264 | Pandan Wangi CF 10kg | 4         | 2018-02-02
5   | 8995157800264 | Pandan Wangi CF 10kg | 9         | 2018-02-03
6   | 8995157800271 | Pandan Wangi CF 20kg | 1         | 2018-02-04
7   | 8995157800271 | Pandan Wangi CF 20kg | 2         | 2018-02-05
8   | 8995157800271 | Pandan Wangi CF 20kg | 1         | 2018-02-10
9   | 8995157800288 | Rojolele CF 5kg      | 5         | 2018-02-15
10  | 8995157800288 | Rojolele CF 5kg      | 3         | 2018-02-16
11  | 8995157800318 | SR CF 5kg            | 8         | 2018-02-20
12  | 8995157800318 | SR CF 5kg            | 2         | 2018-02-25
13  | 8995157800325 | SR CF 10kg           | 10        | 2018-02-28
14  | 8995157800325 | SR CF 10kg           | 5         | 2018-03-01

Я хочуполучить данные об обороте из таблицы detail_order с помощью штрих-кода продукта, но, хотя данные о продукте в таблице mainproduct отсутствуют в таблице detail_order, я хочу, чтобы они отображались с последующим total_order 0, если их нет в таблице detail_order.Менее, чем показано ниже:

id_mainproduct  | barcode       | product_name         | total_order_pcs    |
================+===============+======================+====================+===
1               | 8995157800257 | Pandan Wangi CF 5kg  | 6                  |
2               | 8995157800264 | Pandan Wangi CF 10kg | 13                 |
3               | 8995157800271 | Pandan Wangi CF 20kg | 4                  |
4               | 8995157800288 | Rojolele CF 5kg      | 8                  |
5               | 8995157800301 | Rojolele CF 20kg     | 0                  |
6               | 8995157800318 | SR CF 5kg            | 10                 |
7               | 8995157800325 | SR CF 10kg           | 10                 |
8               | 8995157800332 | SR CF 20kg           | 0                  |

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

мой код:

SELECT mainproduct.id,
       mainproduct.barcode,
       mainproduct.product_name,
       SUM(R.pcs_order) as total_order
FROM
(
  SELECT barcode, pcs_order, date_order
  FROM detail_order
) AS R
LEFT JOIN mainproduct ON mainproduct.barcode = R.barcode
WHERE r.date_order BETWEEN '2018-02-01' AND '2018-02-28' GROUP BY mainproduct.id
ORDER BY mainproduct.id ASC

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Независимо от ваших комментариев, у вас все еще есть объединение в неправильном порядке.

a LEFT JOIN b означает сохранение каждой записи, которая появляется в a, даже если в b нет соответствующей строки.

Если вы хотите, чтобы объем продаж составлял для каждого продукта, даже если нет записей о продажах для продукта (с нулем) , вам нужно products LEFT JOIN sales.

Если вы хотите рассчитывать продажи только в течение определенного периода времени, отфильтруйте продажи Перед объединением (sub, в вашем подзапросе) .

SELECT
   mainproduct.id,
   mainproduct.barcode,
   mainproduct.product_name,
   COALESCE(SUM(R.pcs_order), 0)    AS total_order
FROM
   mainproduct
LEFT JOIN
(
  SELECT barcode, pcs_order, date_order
    FROM detail_order
   WHERE date_order BETWEEN '2018-02-01' AND '2018-02-28'
)
   AS R
      ON mainproduct.barcode = R.barcode
GROUP BY
   mainproduct.id
ORDER BY
   mainproduct.id ASC
0 голосов
/ 24 мая 2018

Вы можете иметь несколько запросов для одной и той же проблемы.Вы можете использовать это.

select p.barcode,p.product_name, coalesce(d.pcs_order, 0)
from (select barcode, sum(pcs_order) pcs_order from detail_order group by barcode) as d
right join mainproduct p on p.barcode = d.barcode
0 голосов
/ 24 мая 2018

Вам нужно присоединиться к вашим столам и выполнить агрегацию

select p.barcode,p.product_name, coalesce(sum(d.pcs_order),0)
from mainproduct p
left join detail_order d on p.barcode = d.barcode
group by p.barcode, p.product_name

Демо

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