如何在列中的不同字段上应用单值
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;
这可能会做你想做的事:
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)
。
我有一个名为 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;
这可能会做你想做的事:
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)
。