0

有一张表,其中包含我需要的金额和状态。但是,此表包含年份信息,但我想要月份。例如,在表格中,它显示了 2011 年肯塔基州的信息……仅此而已。对于加利福尼亚,它显示了大约 5 个不同的年份。但我需要它按月重复。

因此,如果 2011 年肯塔基州总共有 12 个,那么我需要一个查询,显示 12 代表 1 月、2 月、5 月……重复

现在我通过一个愚蠢的查询得到这个输出:

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 执行此操作的任何想法?

4

1 回答 1

1

整个查询看起来像这样:

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

all_months 括号之间的内容取决于“所有月份”的含义。

如果您的意思是所有出现在 state_quantities 中的月份,而与州无关(因此,如果您将肯塔基州与 1 月,加利福尼亚州与 2 月,佛罗里达州与 5 月,您只会得到这三个月),您可以使用以下内容:

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
于 2011-09-29T23:28:08.150 回答