首页 > 解决方案 > 选择语句从不同的行返回值

问题描述

我有一个返回这些结果的选择查询:

Transaction  Type   Value
-----------  ----   -----
1            A      Null
1            A      Null
1            B      1234
2            A      Null
2            A      Null
2            B      4321

我将如何形成它,以便 A 类型的 Null 值被 B 类型的值替换?要得到这个结果:

Transaction  Type  Value
-----------  ----  -----
1            A     1234
1            A     1234
1            B     1234
2            A     4321
2            A     4321
2            B     4321

标签: sqlselect

解决方案


您可以使用窗口函数:

select transaction, type, value,
       max(case when type = 'b' then value end) over (partition by transaction) as new_value
from t;

如果您只想要NULL交易的非价值:

select transaction, type, value,
       max(value) over (partition by transaction) as new_value
from t;

推荐阅读