【问题标题】:Teradata Default ListTeradata 默认列表
【发布时间】:2011-11-26 20:16:35
【问题描述】:

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

因此,如果 2011 年肯塔基州总共有 12 个,那么我需要一个查询,显示 12 个一月、二月、五月....重复

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

Kentucky  12   January
California 800 January

这很容易通过按州、数量和月份分组来完成

我想确保无论数量是多少,每个州都有 ALL 月份

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

知道如何使用 Teradata SQL 做到这一点吗?

【问题讨论】:

  • 恐怕包含的详细信息足以回答您的问题。您是加入日历表/视图以获取日期信息,还是所有这些数据都包含在一个表中?您能否提供表格布局和用于生成结果的 SQL?

标签: sql teradata


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2020-09-10
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多