如何使用SQL将条件应用于多行?何时 /分区

发布于 2025-01-20 16:59:49 字数 614 浏览 1 评论 0原文

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

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

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

shipment.idshipment.name您可以在下面看到我的理想履行
1CAL
1NEV
2PEN
2NEV

I am trying to create a column that shows Yes or No based on a set of conditions. If the conditions are met, then 'Yes' would apply to every row in the group (even if the conditions are only met by some of the rows in the group).

This is what I have so far but it's yielding an error. In essence, if any of the rows belonging to the same shipment id has shipment name = 'CAL', I want the result to be 'Yes'.

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

You can see my ideal table below

shipment.idshipment.namefulfil
1CALYes
1NEVYes
2PENNo
2NEVNo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏夜暖风 2025-01-27 16:59:49

当名称带有“CAL”时,您可以使用MAX()窗口函数返回'Yes'
如果不存在,MAX() 将返回 NULL,并通过 COALESCE()'No'代码>:

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

You can use MAX() window function to return 'Yes' when there is a name with 'CAL'.
If there isn't, MAX() will return NULL which will be turned to 'No' by COALESCE():

SELECT id, name,
       COALESCE(MAX(CASE WHEN name = 'CAL' THEN 'Yes' END) OVER (PARTITION BY id), 'No') AS fulfil
FROM shipment;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文