#sql #subquery #sql-order-by #inner-join #aginity
#sql #подзапрос #sql-order-by #внутреннее соединение #aginity
Вопрос:
Мне приходится запрашивать результаты из трех разных таблиц, и до сих пор мне удавалось получать отдельные результаты по отдельности. Теперь я хотел бы объединить эти результаты. Следующие два фрагмента кода являются моими запросами. Должен ли я как-то вложить эти два? Я бы хотел выполнить внутреннее соединение для s.STORE_NUM и str.num из нижнего запроса, как бы я объявил их отдельно?
SELECT
S.STORE_NUM,
M.YEAR_FISCAL,
--M.YEAR_445,
M.MONTH_NAME_445,
M.WEEK_START_DT_MON,
SUM(SALES_NET) - SUM(S.SALES_GCARD_NET) as SALES_WT_GC,
SUM(S.TRAFFIC_COUNT) AS TRAFFIC,
SUM(S.TICKETS_NET) AS TRANS,
SUM(S.QTY_NET) AS UNITS,
-- Calculation level:
SUM(S.QTY_NET)/SUM(S.TRAFFIC_COUNT) AS UOT,
SUM(S.QTY_NET)/SUM(S.TICKETS_NET) AS UPT,
SUM(S.TICKETS_NET)/SUM(S.TRAFFIC_COUNT) AS CONVPCT
FROM DNA_PUBLIC..RETAIL_SALES_BY_STORE_BY_DAY S
JOIN DNA_PUBLIC.ADMIN.DAY_MAP M
ON S.DATE_DATA = M.DATE_DT
WHERE S.DATE_DATA BETWEEN '08/24/2020' AND '09/27/2020'
AND S.SALES_NET > 0
AND S.TRAFFIC_COUNT > 0
AND S.QTY_NET > 0
AND S.TICKETS_NET > 0
AND S.STORE_NUM = 2Ah
GROUP BY 1,2,3,4
ORDER BY S.STORE_NUM, WEEK_START_DT_MON
и
SELECT r.str_num, r.str_nam, r.str_dst, s.region_name, s.div_name, r.STR_ADDR, r.str_cty, r.str_zip5
FROM admin.retail_store_names r JOIN admin.store_dim s ON r.str_num = s.store_num
Комментарии:
1. Правильно, я удалил соединение и упорядочил по
Ответ №1:
Я бы хотел выполнить внутреннее соединение для s.STORE_NUM и str.num из нижнего запроса, как бы я объявил их отдельно?
Вы можете объединить оба набора результатов, превратив запросы в подзапросы и присоединившись к внешнему запросу. order by
Предложение переходит к внешнему запросу:
select t1.*, t2.*
from (
-- first query goes here (without the "order by")
) t1
inner join (
-- second query goes there
) t2 on t2.str_num = t1.store_num
order by t1.str_num, t2.week_start_dt_mon
Ответ №2:
Вы также можете сделать —
SELECT
S.STORE_NUM,
M.YEAR_FISCAL,
--M.YEAR_445,
M.MONTH_NAME_445,
M.WEEK_START_DT_MON,
max(r.str_num) As str_num,
max(r.str_nam) As str_nam,
max(r.str_dst) As str_dst,
max(st.region_name) As region_name,
max(st.div_name) As div_name,
max(r.STR_ADDR) As STR_ADDR,
max(r.str_cty) As str_cty,
max(r.str_zip5) As str_zip5,
SUM(SALES_NET) - SUM(S.SALES_GCARD_NET) as SALES_WT_GC,
SUM(S.TRAFFIC_COUNT) AS TRAFFIC,
SUM(S.TICKETS_NET) AS TRANS,
SUM(S.QTY_NET) AS UNITS,
-- Calculation level:
SUM(S.QTY_NET)/SUM(S.TRAFFIC_COUNT) AS UOT,
SUM(S.QTY_NET)/SUM(S.TICKETS_NET) AS UPT,
SUM(S.TICKETS_NET)/SUM(S.TRAFFIC_COUNT) AS CONVPCT
FROM DNA_PUBLIC.RETAIL_SALES_BY_STORE_BY_DAY S
JOIN DNA_PUBLIC.ADMIN.DAY_MAP M
ON S.DATE_DATA = M.DATE_DT
JOIN admin.retail_store_names r
ON S.Store_num = r.Str_num
JOIN admin.store_dim st
ON r.str_num = s.store_num
WHERE S.DATE_DATA BETWEEN '08/24/2020' AND '09/27/2020'
AND S.SALES_NET > 0
AND S.TRAFFIC_COUNT > 0
AND S.QTY_NET > 0
AND S.TICKETS_NET > 0
AND S.STORE_NUM = 2Ah
GROUP BY 1,2,3,4
ORDER BY S.STORE_NUM, M.WEEK_START_DT_MON