如何基于现有列获取列的值

时间:2019-03-26 13:05:42

标签: sql teradata

我的要求是以以下格式获取数据:如果我对COL1具有相同的值,则应该为所有行填充最低的COL2值,并且必须填充相应的COL3值(这可以是硬编码,因为它不会改变),并且应该为所有行填充与COL2最低值相对应的COL4值。(不能硬编码)

表中的现有数据

SELECT COL1 , COL2 , COL3 , COL4 FROM TABLE1 

COL1  COL2  COL3  COL4
1234  01    ABC   YYY
1234  02    DEF   ZZZ

我的预期输出是:

COL1  COL2  COL3  COL4
1234  01    ABC   YYY
1234  01    ABC   YYY

我尝试了以下查询,但获得了COL2和COL3的输出,但没有获得关于COL4的输出。

SELECT
  COL1,
  MIN(COL2) OVER (PARTITION BY COL1)     AS COL2NEW,
  CASE WHEN COL2NEW = 1 THEN 'ABC'
       WHEN COL2NEW = 2 THEN 'DEF' END   AS COL3NEW,
  COL4
FROM
  TABLE1

请指导我获取适合COL4的输出。

1 个答案:

答案 0 :(得分:1)

您的问题很模糊,但是我认为FIRST_VALUE()是您要寻找的分析函数...

SELECT
  COL1,
  MIN(COL2) OVER (PARTITION BY COL1)     AS COL2NEW,
  CASE WHEN COL2NEW = 1 THEN 'ABC'
       WHEN COL2NEW = 2 THEN 'DEF' END   AS COL3NEW,
  FIRST_VALUE(COL4) OVER (PARTITION BY COL1
                              ORDER BY COL2
                          ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
                         )
                            AS COL4NEW
FROM
  TABLE1

在按COL4对分区进行排序之后,它采用COL2的第一个值。这意味着分区中的所有行在COL4NEW中都具有相同的值,并且该值来自COL2中具有最低值的输入行。