添加一个布尔列,指示 ID 是否与不同列中的特定值相关联?

Add a boolean column indicating if an ID is associated with a particular value in a different column?

我想添加一个布尔值列,指示 ID 是否至少连接到一个 Z 值。

所以这个样本类似于我的数据集:

id | value
___________
1 | a
2 | b
2 | c
2 | Z
2 | Z
3 | d
4 | a
5 | Z
6 | a
7 | Z

这是我想要的结果:

id | hasZ
_________________
1 | false
2 | true
3 | false
4 | false
5 | true
6 | false
7 | true

但我不知道如何到达那里。我知道如何获得具有 TRUE 的不同 id,但我不知道如何将它们组合起来以获得不同的 true 和 false。

select distinct *
from (
  select id
    , CAST(CASE WHEN value = 'NULL' THEN 1 ELSE 0 END AS boolean) AS hasZ
  from table1 
)
where hasZ = true

以上代码的结果:

id | hasZ
_________________
2 | true
5 | true
7 | true

使用聚合:

select id,
       max(case when value = 'Z' then 1 else 0 end) as has_z
from table1
group by id;

注意:SQL 服务器没有 布尔值 数据类型,所以这个 returns 0/1.