【问题标题】:create a view to cater to dynamic month创建一个视图以迎合动态月份
【发布时间】:2021-09-08 22:50:48
【问题描述】:

提供了一个子查询来创建一个视图,并且该视图应满足动态月份变量的需求。

这样的子查询:

select col1,col2,col3,col4, sum(money) as KPI_single_month from table1 group by col1,col2,col3,col4 where month='202104' 

--月份不固定,可能是202103,202106

视图应该这样调用:

select col1,col2,col3,col4,KPI from view1 where month='202104' 

--月份不固定,可能是202103,可能是202106

此视图的关键输出是 KPI,即从 202101 到 202104 的 KPI_single_month 之和。 如果月份是 202106,则从 1 月到 6 月求和(KPI_single_month)(共 6 个月)。

那么创建视图的难点在于月份变量是未知的,那么创建视图的SQL语句中要求和多少个子查询呢?谢谢!

【问题讨论】:

  • 这应该在您的报告前端工具中处理。您可以在存储过程中执行此操作,但(至少在我看来)这不值得麻烦。
  • 您可以尝试将month 添加到群组中。当然,您应该检查优化器是否能够将条件 i 推送到 select before 聚合中。

标签: sql teradata teradatasql


【解决方案1】:

为什么要尝试创建视图而不是存储过程来获得所需的总和 您将月份传递给该过程,它会创建一个临时表,然后对其进行查询或仅输出总和

【讨论】:

  • 在我的生产环境中,存储过程需要通过限制措施进行审查,而视图不需要。
【解决方案2】:

一般情况下,无法将参数传递给视图(不确定 Teradata 特定)

【讨论】:

  • 我同意你的看法。我的目标不是将参数传递给视图。
  • 谁知道Teradata是否支持传递参数来查看?在Oracle数据库中,syscontext有一个特性,可以传递参数给视图。
  • 在 Teradata 中,视图不允许使用参数。宏和存储过程允许参数并且可以返回答案集 - 但不能在 FROM 子句中使用。表函数/表运算符(C/C++ 或 Java 代码)可能接受参数并返回可由外部查询处理的结果集,但这要复杂得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多