如何根据现有列获取列的值

How to fetch the values for a column based on existing columns

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

现有数据在table

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 获得适当的输出。

你的问题比较含糊,不过我觉得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

COL2对分区排序后取COL4的第一个值。这意味着分区中的所有行在 COL4NEW 中获得相同的值,并且该值来自 COL2 中具有最低值的输入行。