У меня есть продажа таблиц, в которых я показываю текущее среднее значение среднего квартала продукта в определенном регионе и этот продукт в предыдущем квартале. Моя таблица имеет структуру, как-Как присоединиться к этому запросу?
Region Product Year Qtr Month Sales
NORTH P1 2015 1 JAN 1000
SOUTH P1 2015 1 FEB 3000
NORTH P1 2015 1 MAR 3000
NORTH P1 2015 2 APR 4000
NORTH P1 2015 2 MAY 5000
NORTH P1 2015 2 JUN 6000
NORTH P1 2015 3 JUL 7000
NORTH P1 2015 3 AUG 8000
NORTH P1 2015 3 SEP 9000
NORTH P1 2015 4 OCT 1000
NORTH P1 2015 4 NOV 2000
NORTH P1 2015 4 DEC 4000
........
SOUTH P3 2015 4 NOV 3000
NORTH P1 2015 1 FEB 2000
SOUTH P1 2015 1 JAN 2000
SOUTH P1 2015 1 JAN 4000
SOUTH P2 2016 1 JAN 2000
SOUTH P2 2016 1 JAN 4000
NORTH P1 2016 1 MAR 3000
NORTH P1 2016 1 FEB 1000
NORTH P1 2016 1 JAN 2000
и у меня есть в этом выводе form-
Region Product Year Month Sales Qtr Avg_Sale Prev_Qtr_Sale
NORTH P1 2015 JAN 1000 1 2000 null
NORTH P1 2015 FEB 2000 1 2000 null
NORTH P1 2015 MAR 3000 1 2000 null
NORTH P1 2015 APR 4000 2 5000 2000
NORTH P1 2015 MAY 5000 2 5000 2000
NORTH P1 2015 JUN 6000 2 5000 2000
NORTH P1 2015 JUL 7000 3 8000 5000
NORTH P1 2015 AUG 8000 3 8000 5000
NORTH P1 2015 SEP 9000 3 8000 5000
NORTH P1 2015 OCT 1000 4 2333.3 8000
NORTH P1 2015 NOV 2000 4 2333.3 8000
NORTH P1 2015 DEC 4000 4 2333.33 8000
SOUTH P2 2015 JAN 8000 1 6000 null
SOUTH P2 2015 FEB 9000 1 6000 null
SOUTH P2 2015 MAR 1000 1 6000 null
SOUTH P2 2015 APR 2000 2 6333.33 6000
SOUTH P2 2015 MAY 8000 2 6333.33 6000
SOUTH P2 2015 JUN 9000 2 6333.33 6000
SOUTH P2 2015 JUL 1000 3 2333.33 6333.33
SOUTH P2 2015 AUG 2000 3 2333.33 6333.33
SOUTH P2 2015 SEP 4000 3 2333.33 6333.33
SOUTH P2 2015 OCT 5000 4 2666.67 2333.33
SOUTH P2 2015 NOV 2000 4 2666.67 2333.33
SOUTH P2 2015 DEC 1000 4 2666.67 2333.33
NORTH P3 2015 FEB 9000 1 5000 null
NORTH P3 2015 FEB 1000 1 5000 null
NORTH P3 2015 APR 2000 2 2000 5000
NORTH P3 2015 JUL 8000 3 8000 2000
SOUTH P3 2015 AUG 9000 3 9000 null
SOUTH P3 2015 OCT 1000 4 2000 9000
SOUTH P3 2015 NOV 3000 4 2000 9000
NORTH P1 2016 JAN 2000 1 2000 2333.33
NORTH P1 2016 FEB 1000 1 2000 2333.33
NORTH P1 2016 MAR 3000 1 2000 2333.33
SOUTH P2 2016 JAN 2000 1 3000 2666.67
SOUTH P2 2016 JAN 4000 1 3000 2666.67
SOUTH P1 2015 JAN 4000 1 3000 null
SOUTH P1 2015 JAN 2000 1 3000 null
SOUTH P1 2015 FEB 3000 1 3000 null
нуль показывает, что нет никакой продажи этого продукта в предыдущем квартале. Запрос
это-WITH AvgSales
AS (SELECT
region,
product,
year,
qtr,
ROUND(AVG(sales), 2) AS avg_Sale
FROM sales
GROUP BY region,
product,
year,qtr
)
SELECT
s.region,
s.product,
s.year,
s.month,
s.sales,
avg.qtr,
avg.avg_Sale AS Qtr_Avg_Sale,
prev.avg_sale AS Prev_Qtr_Avg_Sale
FROM sales s
JOIN AvgSales avg
ON s.region = avg.region
AND s.product = avg.product
AND s.QTR = avg.qtr
AND s.year = avg.year
LEFT JOIN AvgSales prev
ON (s.region = prev.region
AND s.product = prev.product
AND s.year - 1 = prev.year
AND prev.qtr = 4) or
(s.region = prev.region
AND s.product = prev.product
AND s.year = prev.year
AND s.qtr - 1 = prev.qtr) ;
У меня есть вопрос при вступлении в таблицу в второй присоединиться, как таблицы вступают в качестве условия объединения, почему в этом условии соединения оно не включая 2,3,4 квартала предыдущего года
s.region = prev.region
AND s.product = prev.product
AND s.year - 1 = prev.year
AND prev.qtr = 4
Может ли кто-нибудь помочь?
Я хочу знать, почему в этом состоянии присоединиться это не включая четверть 2,3,4 следующего года, поскольку они также удовлетворяющие этому условию. . :(Почему только первый квартал работает? –
Мне кажется, что есть, вероятно, некоторые последующие вычисления (в отчете, возможно?), Которые требуют предыдущего года и/или предыдущего квартала (процентные вычисления, возможно?). как этот запрос используется, мы можем только догадываться. –
Я не понимаю, что вы только что сказали @XLAnt –