如何使用 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 NULL
由 COALESCE()
:
变为 'No'
SELECT id, name,
COALESCE(MAX(CASE WHEN name = 'CAL' THEN 'Yes' END) OVER (PARTITION BY id), 'No') AS fulfil
FROM shipment;
我正在尝试创建一个根据一组条件显示“是”或“否”的列。如果满足条件,则 '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 NULL
由 COALESCE()
:
'No'
SELECT id, name,
COALESCE(MAX(CASE WHEN name = 'CAL' THEN 'Yes' END) OVER (PARTITION BY id), 'No') AS fulfil
FROM shipment;