Создать отчет SQL, связывающий тысячи записей - PullRequest
0 голосов
/ 18 января 2019

Я новичок в Oracle SQL и пытаюсь сделать следующее:

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

Пытаясь создать этот отчет, я начинаю пытаться создать таблицу со всеми неделями года и идентификатором продукта, проблема в том, что существуют тысячи продуктов. Я пытаюсь получить что-то вроде:

WEEK_YR   PRODUCT_ID
------    ----------
2018011   Product 1
2018012   Product 1
...
2018053   Product 1
...
2018124   Product 1
...
2018011   Product 2
2018012   Product 2
...
2018053   Product 2
...
2018124   Product 2

А затем просто объедините эту таблицу с таблицей продаж в неделю, поместив 0 в эти нулевые недели из этой таблицы.

Я прошу вашей помощи при создании первой таблицы, я просто считаю таблицу с идентификатором продуктов, а другую - список недель с прошлого года

Заранее спасибо!

1 Ответ

0 голосов
/ 18 января 2019

Я прошу вашей помощи при создании первой таблицы ...

Вам не нужно создавать постоянную таблицу для этого.Начиная с Oracle 9.2 вы можете использовать CTE (Common Table Expressions).В приведенном ниже примере cte w - это то, что вы ищете:

with x as ( --- cte that generates numbers from 1 to 52
  select 1 as n from dual
  union all
  select n + 1 from x where n < 52
),
w as ( --- cte that generates the week_yr
  select 2018000 + n as week_yr from x
)
select -- main query now.
  w.week_yr,
  p...
from w
left join products p on p.week_yr = w.week_yr
where ...
group by ...

В приведенном выше запросе cte x генерирует числа от 1 до 52. Затем cte w генерируетweek_yr значения, которые вам нужны.

Наконец, основной запрос может делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...