Продажи за текущий год и продажи за предыдущий год в одной таблице? - PullRequest
0 голосов
/ 05 февраля 2020

Доброе утро,

Я хочу добавить «Продажи за предыдущий год» к той же неделе в запросе Teradata, но мне не удается написать код. Базовая линия, которую я бы кодировал, чтобы получить продажи за эту неделю / год, была бы:

SELECT a."WEEK_NBR" AS "YearWeek"
, SUM(a."Sales") AS "CurrentYearSales"

FROM "SALESTABLE" AS a

, что привело бы к:

YearWeek  CurrentYearSales

201901    $7,499

201902    $2,300

201903    $6,360


...

202001    $4,500

202002    $9,000

202003    $8,500

Я хочу иметь возможность получить данные за предыдущий год Продажи на той же неделе в той же строке, если предыдущий год есть в таблице данных. Таким образом, готовая таблица будет выглядеть так:

YearWeek  CurrentYearSales PriorYearSales

201901    $7,499           NULL

201902    $2,300           NULL

201903    $6,360           NULL
...

202001    $4,500           $7,499

202002    $9,000           $2,300

202003    $8,500           $6,360

Когда я ищу, все, что я могу найти, это как сделать это с данными текущей недели, но возможно ли это со всеми записями в таблице?

1 Ответ

0 голосов
/ 05 февраля 2020

Редактировать: Когда вы СУММИРУЕТЕ данные, которые нужно агрегировать до объединения.

Вам необходимо самостоятельное объединение, предполагая, что WEEK_NBR равно цифре c:

with cte as 
 (
   SELECT a."WEEK_NBR" AS "YearWeek"
    , SUM(a."Sales") AS "CurrentYearSales"
   FROM "SALESTABLE" AS a
   group by 1
 )
select ...
from cte as t1
left join cte as t2
on t2.YearWeek = t1.Ye arWeek- 100

Как отметил @Andrew, это также будет работать со строкой, потому что Teradata будет автоматически c typecast для float, когда вы добавляете число в строку или сравниваете число c и строку (я бы предпочел хотя написание явного приведения типа)

...