我有以下形式的数据:
Name Category my_value
Ana A 42
Ana B 33
Bob A 33
Bob B 33
Carla A 42
Carla B 33
我希望相同的名称发生以下情况:
- 当A和B共享相同的值时,A没有与其关联的值(在colmy_alue中(
- 当A和B不同时,A保持其值,而B没有与之相关的值(在colmy_value中(
我尝试过:
select *,
case when Category = 'A' and Category = 'B'
then my_value = null
else my_value
end as "Value A (corrected)"
from my_table
显然错了。。。不确定如果值不同,我如何也实现将B设置为null的条件。以及如何通过这里实现一个组来比较相同名称的类别。。。
理想情况下,这是我追求的输出(同一列中的更改,因为其中每个名称都有更多类别,即C、D、e…-只需要更改A和B(
Name Category Value
Ana A 42
Ana B
Bob A
Bob B 33
Carla A 42
Carla B
在另一行是A/B赞美的地方加入自己:
select
t1.Name,
t1.Category,
case
when t1.my_value = t2.my_value and t1.Category = 'A' then null
when t1.my_value != t2.my_value and t1.Category = 'B' then null
else t1.my_value
end as my_value
from my_table t1
left join my_table t2 on t2.Name = t1.Name
and t2.Category != t1.Category
and t2.Category in ('A', 'B')
and t1.Category in ('A', 'B')
观看现场演示。
如果t1的类别为"A",t2的类别为为"B",则与t2连接,反之亦然,并且名称相同。