【问题标题】:Query for the scenario查询场景
【发布时间】:2016-04-06 14:17:29
【问题描述】:

我必须实现一个查询,其中的场景如下所示;

Col_1 Col_2  Col_3  Col_4  Col_5
A       AB    AC     AD     AE
B       BC    BD     BE     ? 
C       CD    CE      ?      ?
D       DE     ?       ?      ?
E        ?     ?       ?      ?

非常感谢您对以下内容的任何帮助。

谢谢, 阿米特

【问题讨论】:

  • 尝试使用 Rows 1 following 和 1 following 来实现。
  • 你能显示实际数据吗?您的 Teradata 版本是什么?
  • 嗨迪特,到目前为止,我没有实际数据。我的 teradata 版本是 14.01.0.04。
  • 数据类型是什么?结果 AB 是一个串联的字符串还是什么?
  • 是的,都是varchar字段。

标签: teradata


【解决方案1】:

每列需要不同的rows

select
   col_1
  ,col_1 || min(col_1) over (order by ... rows between 1 following and 1 following)
  ,col_1 || min(col_1) over (order by ... rows between 2 following and 2 following)
  ,col_1 || min(col_1) over (order by ... rows between 3 following and 3 following)
  ,col_1 || min(col_1) over (order by ... rows between 4 following and 4 following)

【讨论】:

  • 感谢 Dieter,一切正常。我有一个疑问,而且一直都是。 min(col1) over.. 在这里如何工作。 max(col1) over .. 也给出了所需的结果。有什么区别。
  • @user3901666:这是在 Teradata 中模仿 Standatd SQL 的 LEAD(col_1,n) 的一种方式。由于窗口的大小正好是一行MINMAX 将返回相同的值。
【解决方案2】:

{

SELECT CHR(64+LEVEL) AS A,
DECODE(SIGN( 4 - LEVEL ) , -1, '?',CHR(64+LEVEL)||CHR(65 +LEVEL)) B,
DECODE(SIGN( 3 - LEVEL ) , -1, '?',CHR(64+LEVEL)||CHR(66 +LEVEL)) C,
DECODE(SIGN( 2 - LEVEL ) , -1, '?',CHR(64+LEVEL)||CHR(67 +LEVEL)) D,
DECODE(sign( 1 - level ) , -1, '?',chr(64+level)||chr(68 +level)) E
 from dual connect by level <6;

} 以上是使用oracle 10g,其他db应该有其他策略。

【讨论】:

  • 非常感谢 Dieter,它运行良好。 @nirjhar--不知道如何在 teradata 中实现它。感谢您的帮助。
猜你喜欢
  • 2016-11-20
  • 1970-01-01
  • 2021-09-16
  • 2015-08-08
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多