添加一个布尔列,指示 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.
我想添加一个布尔值列,指示 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.