我的要求是以以下格式获取数据:如果我对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的输出。
答案 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
中具有最低值的输入行。