2015-05-14 4 views
0

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

Например, клиент никогда не покупал товары раньше (кошка 2 или кошка 3) и приобретал продукты на 5/5 в первый раз. Эта продажа не появляется в отчете, потому что они купили что-то у cat 60 ранее.

select CUSTOMER_DEL_HIST.CUSTOMER_NUMBER 
     ,max (CUSTOMER_DEL_HIST.SERVE_LOCATION) as SERVE_LOCATION 
     ,max (CUSTOMER_DEL_HIST.PRODUCT_NUMBER) as PRODUCT_NUMBER 
     ,max (CUSTOMER_DEL_HIST.DEL_DATE) as DEL_DATE 
     ,max (ORDER_RTE_BAL.WAREHOUSE) as WAREHOUSE 
     ,max (ORDER_RTE_BAL.ROUTE_NUMBER) as ROUTE_NUMBER 
     ,max (ORDER_RTE_BAL.ROUTE_DAY) as ROUTE_DAY 
from CUSTOMER_DEL_HIST 
     inner join INV_MASTER on CUSTOMER_DEL_HIST.PRODUCT_NUMBER = INV_MASTER.PRODUCT_NUMBER 
     inner join ORDER_HEADER on CUSTOMER_DEL_HIST.ORDER_NUMBER = ORDER_HEADER.ORDER_NUMBER 
     inner join ORDER_RTE_BAL 
      on ORDER_HEADER.WAREHOUSE_NUMBER = ORDER_RTE_BAL.WAREHOUSE 
       and ORDER_HEADER.ROUTE_NUMBER = ORDER_RTE_BAL.ROUTE_NUMBER 
       and ORDER_HEADER.ROUTE_DAY = ORDER_RTE_BAL.ROUTE_DAY 
       and ORDER_HEADER.DELIVERY_DATE = ORDER_RTE_BAL.ROUTE_DATE 
where (CUSTOMER_DEL_HIST.DEL_DATE between X and Y) 
     and (INV_MASTER.INVENTORY_CATEGORY in ('02', '03', '60', '74')) 
     and (CUSTOMER_DEL_HIST.CUSTOMER_NUMBER not in 
      (select H2.CUSTOMER_NUMBER 
      from CUSTOMER_DEL_HIST H2 
      inner join INV_MASTER as I on H2.PRODUCT_NUMBER = I.PRODUCT_NUMBER 
      where H2.DEL_DATE between '6/01/2014' and '04/30/2015' 
       and I.INVENTORY_CATEGORY in ('02', '03', '60', '74'))) 
group by CUSTOMER_DEL_HIST.CUSTOMER_NUMBER 

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

+1

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

+0

Похоже, вы исключаете всех клиентов, которые купили что-либо в (02,03,60,74) между 6/1/14 и 4/30/15. Вот почему вы не видите определенных заказов. Какова причина этого утверждения? – clesiemo3

ответ

1

Не может предложить много способов помочь с реальной проблемой, но, поскольку вы сказали, что являетесь новым, я думал, что покажу вам, насколько ваш запрос может быть с минимальным усилием. Если вы начинаете использовать псевдонимы, вы можете устранить десятки символов в строке, а ваш код может быть намного чище. Многое форматирование - это личное предпочтение, но код, который вы опубликовали, просто способ бросить вызов. Вот один из способов использования псевдонимов и их очистка значительно.

SELECT cdh.customer_number 
    , Max(cdh.serve_location) AS serve_location 
    , Max(cdh.product_number) AS product_number 
    , Max(cdh.del_date) AS del_date 
    , Max(orb.warehouse) AS warehouse 
    , Max(orb.route_number) AS route_number 
    , Max(orb.route_day) AS route_day 
FROM customer_del_hist cdh 
INNER JOIN inv_master im ON cdh.product_number = im.product_number 
INNER JOIN order_header oh ON cdh.order_number = oh.order_number 
INNER JOIN order_rte_bal orb ON oh.warehouse_number = orb.warehouse 
     AND oh.route_number = orb.route_number 
     AND oh.route_day = orb.route_day 
     AND oh.delivery_date = orb.route_date 
WHERE cdh.del_date BETWEEN @StartDate AND @EndDate 
    AND im.inventory_category IN ('02', '03', '60', '74') 
    AND cdh.customer_number NOT IN 
    (
     SELECT h2.customer_number 
     FROM customer_del_hist AS h2 
     INNER JOIN inv_master AS i ON h2.product_number = i.product_number 
     WHERE h2.del_date BETWEEN '6/01/2014' AND '04/30/2015' 
      AND i.inventory_category IN ('02', '03', '60', '74') 
    ) 
GROUP BY cdh.customer_number 
+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. –

+0

@ CraigS.Anderson Я заявил, что это не ответило на их вопрос. Это, очевидно, не будет работать в комментарии, и мне неудобно просто уйти и не предлагать некоторую помощь ОП, даже если помощь носит общий характер и не указывает на этот точный вопрос. Для меня речь идет о том, чтобы отдать назад и помочь другим узнать, если это означает превышение типичных ожиданий, так и так. –

1

В ИНЕКЕ вашего запроса, последняя часть имеет

cdh.customer_number NOT IN 
    (
     SELECT h2.customer_number 
     FROM customer_del_hist AS h2 
     INNER JOIN inv_master AS i ON h2.product_number = i.product_number 
     WHERE h2.del_date BETWEEN '6/01/2014' AND '04/30/2015' 
      AND i.inventory_category IN ('02', '03', '60', '74') 
    ) 

Это будет область, которая за исключением клиентов. Вы можете видеть, что в подзапросе есть предложение where, и это предложение where указывает, что категория inventory_category должна быть одной из 02, 03, 60, 74. Таким образом, вы находите всех клиентов, которые купили что-либо в любой из этих категорий, затем исключая их из результатов вашего основного запроса.

Смежные вопросы