【问题标题】:Avoid manual column creation in Teradata SQL避免在 Teradata SQL 中手动创建列
【发布时间】:2019-06-03 16:33:09
【问题描述】:

考虑以下名为“VIEW”的 Teradata 视图,它由事务数据组成。

ATTR1 ATTR2  DATE1       DATE2      WEEK1   WEEK2 AMOUNT

A       B   1/1/2019    1/8/2019    201901  201902  10
A       B   12/26/2018  1/8/2019    201852  201902  20
A       B   1/1/2019    1/15/2019   201901  201903  30
A       B   1/8/2019    1/15/2019   201902  201903  30

DATE1 是过帐日期,DATE2 是交易的清算日期。 WEEK1 和 WEEK2 分别是 DATE1 和 DATE2 的会计周。 ATTR 是交易的随机属性。我需要按属性的“周”报告交易金额。

例如,对于 201901 周,我们希望查看 201901 周和之前的过帐日期以及 201901 之后的清算日期的交易金额。请参见下面的代码。

select ATTR1,
       ATTR2,
       SUM(CASE WHEN WEEK2 > 201852 AND WEEK1 <= 201852 THEN AMOUNT END) AS AMT_201852,
       SUM(CASE WHEN WEEK2 > 201901 AND WEEK1 <= 201901 THEN AMOUNT END) AS AMT_201901,
       SUM(CASE WHEN WEEK2 > 201902 AND WEEK1 <= 201902 THEN AMOUNT END) AS AMT_201902,
FROM VIEW
GROUP BY 1,2

结果:

ATTR1   ATTR2   AMT_201852  AMT_201901  AMT_201902
A        B          20          60          60

正如上面的代码所示,我们不得不为每周手动创建列,这是我们希望避免的。有没有办法在几周过去时动态创建这些列?还是有更好的方法来表示这一点? 在报告中,使用 WEEK1 作为过滤器将过滤掉较早的几周(如果 WEEK1 为 201901,则 201852 将被过滤掉并丢失相应的数量)。我们最终将此 SQL 放入 PowerBI 仪表板。

谢谢!

【问题讨论】:

  • 您总是报告相同的周数还是可变的? ISO,您的周数是如何定义的?
  • @dnoeth 由于我们的报告采用滚动格式,因此周数会有所变化。我们保留了大约 30 周的历史记录。是的,我相信星期是根据 ISO 定义的。

标签: powerbi teradata teradata-sql-assistant


【解决方案1】:

您将不得不对此进行一些处理,但它应该可以让您朝着正确的方向前进。 Teradata 内置了一个非常有用的日期视图:sys_calendar.calendar

例如,这将以样本数据中的格式 (YYYYWW) 为您提供过去三周的数据:

select
    distinct week_of_year,
    year_of_calendar,
    (year_of_calendar * 100) + week_of_year as year_week
from
sys_calendar.calendar
where
calendar_date between  (current_date - interval '21' day) and current_date
order by year_week

您应该能够将 current_date 替换为参数以使其动态化,并将其加入您的表中。

【讨论】:

  • 感谢安德鲁的回复。但是,我不确定这有什么帮助,因为我已经有一个财务日历表,我从中查找 WEEK1 和 WEEK2。该表包含历史和未来的几周。
  • 嗯,根据您的财务表的样子,您可能可以用它做类似的事情。
  • 我在这里无法理解您的解决方案。你能更详细地解释一下吗?如果我不清楚,我已经编辑了我的问题。
  • 大家好,有什么想法吗?我还没有找到前进的方向。
猜你喜欢
  • 2019-01-29
  • 1970-01-01
  • 2014-03-29
  • 2020-06-17
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多