Teradata Default List - PullRequest
       9

Teradata Default List

0 голосов
/ 28 сентября 2011

Есть одна таблица, которая содержит суммы и состояния, которые мне нужны.Тем не менее, эта таблица содержит информацию о году, но я хочу месяц.Например, в таблице он показывает информацию для Кентукки за 2011 год ... и это все.Для Калифорнии это показывает около 5 разных лет.Но мне нужно, чтобы это повторялось по месяцам.

Так что если в 2011 году в Кентукки было всего 12, то мне нужен запрос, который показывает 12 за январь, февраль, май .... повторно

Правотеперь я получаю этот вывод с тупым запросом, который у меня есть:

Kentucky  12   January
California 800 January

Это легко сделать путем группировки по состоянию, количеству и месяцу

Я хочу убедиться, что независимо от количествав каждом штате есть ВСЕ месяцы

Kentucky  12   January
Kentucky  12   February
Kentucky  12   May
California 800 January
California 800 February
California 800 May

Есть идеи, как это сделать с помощью Teradata SQL?

1 Ответ

1 голос
/ 30 сентября 2011

Общий запрос будет выглядеть примерно так:

SELECT
  state_quantities.state,
  state_quantities.quantity,
  all_months.month_name
FROM state_quantities
CROSS JOIN (
  ...
) all_months

То, что стоит в скобках для all_months, зависит от того, что вы подразумеваете под "все месяцы".

Если вы имеете в виду все месяцы, которые отображаются в state_quantities независимо от штата (поэтому, если у вас Кентукки с январем, Калифорния с февралем и Флорида с маем, вы получите только эти три месяца), вы можете использовать что-то вроде этого:

SELECT
  month_name
FROM state_quantities
GROUP BY month_name

Если вы хотите все 12 месяцев, вы присоединитесь к таблице, содержащей все 12 месяцев. В отсутствие этого вы можете использовать sys_calendar.calendar (синтаксис ниже может быть отключен):

SELECT
  CAST(calendar_date AS DATE FORMAT 'MMM') AS month_name
FROM sys_calendar.calendar
GROUP BY month_name
...