如何使用 SQL 将条件应用于多行?案例/分区结束

How can I apply a condition to multiple rows using SQL? CASE WHEN / PARTITION OVER

我正在尝试创建一个根据一组条件显示“是”或“否”的列。如果满足条件,则 'Yes' 将应用于组中的每一行(即使条件仅被组中的某些行满足)。

这是我目前所拥有的,但它产生了一个错误。本质上,如果属于同一装运 ID 的任何行的装运名称 = 'CAL',我希望结果为 'Yes'.

CASE WHEN shipment.name = 'CAL' THEN 'Yes' ELSE 'No' OVER (PARTITION BY shipment.id) END AS fulfil

你可以在下面看到我的理想table

shipment.id shipment.name fulfil
1 CAL Yes
1 NEV Yes
2 PEN No
2 NEV No

当名字中有'CAL'.
时,可以使用MAX()window函数return'Yes' 如果没有,MAX() 将 return NULLCOALESCE():

变为 'No'
SELECT id, name,
       COALESCE(MAX(CASE WHEN name = 'CAL' THEN 'Yes' END) OVER (PARTITION BY id), 'No') AS fulfil
FROM shipment;