如何在列中的不同字段上应用单值

How to apply singe value over different fields in column

我有一个名为 table1 的示例 table,它看起来像这样:

id       value 
123      X
123      Z
123      B
456      X
456      A
...etc

基本上我想做的是创建一个脚本来查看每个 id 和与之关联的值。如果任何值不是 X 或 Z,则将其应用于新列中的 id。它看起来像这样:

id     value  new_value
123    X      B
123    Z      B
123    B      B
456    X      A
455    A      A

对于除 X 或 Z 之外没有任何其他值的 ID,则只需将相同的值应用于 new_value 列

您可以在此处使用 MAX 作为分析函数的条件聚合方法:

SELECT
    id,
    value,
    CASE WHEN COUNT(CASE WHEN value NOT IN ('X', 'Z') THEN 1 END) OVER (PARTITION BY id) = 0
         THEN value
         ELSE MAX(CASE WHEN value NOT IN ('X', 'Z') THEN value END) OVER (PARTITION BY id) END AS new_value
FROM yourTable;

Demo

这可能会做你想做的事:

select t.*,
       coalesce(max(case when value not in ('X', 'Z') then value end) over (partition by id),
                value
               )
from t;

我不确定 else 子句应该是 value 还是 max(value) over (partition by id)