我有以下形式的資料:
Name Category my_value
Ana A 42
Ana B 33
Bob A 33
Bob B 33
Carla A 42
Carla B 33
我希望相同的Name發生以下情況:
- 當 A 和 B 共享相同的值時,A 沒有與之關聯的值(在 col my_alue 中)。
- 當 A 和 B 不同時,A 保留其值,而 B 沒有與之關聯的值(在 col my_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 的條件。以及如何通過here實作一個組來比較同名的類別......
理想情況下,這是我所追求的輸出(在同一列中更改,因為其中的每個名稱都有更多類別,即 C、D、E ... - 只需要更改 A 和 B)
Name Category Value
Ana A 42
Ana B
Bob A
Bob B 33
Carla A 42
Carla B
uj5u.com熱心網友回復:
在另一行是 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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/406854.html
標籤:
上一篇:減去按列分組的2列
