Псевдоним A
действует как поставщик защитного значения, которое ограничивает количество B
строк, присоединяемых к нему.Таким образом, если вы SUM(A.SALES)
, вы, по сути, умножаете продажи строки защиты на количество подходящих ей строк B на A.qtr >= B.qtr
. group by 1,2,3,4
действительно может быть group by 1,2,3
.Вы понимаете, почему?
Столбец 4 th , A.sales
в сочетании с критериями where
приводит к тому, что A.sales
всегда будет одинаковым для группы 1,2,3 и, следовательно, не нужно.
Изучите несгруппированные результаты для лучшего понимания:
proc sql;
create table work.result_ungrouped as
select
a.id,
a.year,
a.qtr as a_qtr,
a.sales as a_sales,
b.qtr as b_qtr,
b.sales as b_sales
from
test a,
test b
where
a.id = b.id and
a.year = b.year and
a.qtr >= b.qtr
;
quit;
Таким образом, правильные результаты доставляются SUM(B.sales)
, потому что они подчинены (или подробно)значения в группе, которая будет агрегироваться.