使用 oracle sql 中的 window 函数检查分区中是否存在值

Check existence of a value in a partition using window function in oracle sql

我有以下一组数据。

我的目标是当分区 (PARTITION BY COLUMN2) 中存在值 C101808491229 时,最后一列 Exists 的值为 YES,否则值为 NO

我尝试通过以下两种方式这样做:

1.COUNT(CASE WHEN COLUMN5 = 'C101808491229' THEN 'YES' ELSE 'NO' END) OVER (PARTITION BY COLUMN2) AS EXISTS

2.CASE WHEN COLUMN5 = 'C101808491229' THEN 'YES' ELSE 'NO' END AS EXISTS

但似乎都不适合我。

希望我表达清楚了。有人可以告诉我是否有可能实现这一目标吗?

使用这个版本:

CASE WHEN COUNT(CASE WHEN COLUMN5 = 'C101808491229' THEN 1 END)
    OVER (PARTITION BY COLUMN2) > 0 THEN 'YES' ELSE 'NO' END AS "EXISTS"

内部 CASE 表达式对每个 COLUMN2 分区进行条件计数,计算 COLUMN5 具有目标值的次数。当计数大于零时,外部 CASE 表达式显示 YES,否则显示 NO.

注意:EXISTS是关键字,别名请使用其他名称。

您可以在没有 window 功能的情况下执行此操作,如下所示。

SELECT YT.*
    ,CASE 
        WHEN C.COLUMN2 IS NULL
            THEN 'No'
        ELSE 'Yes'
        END AS  "EXISTS"
FROM YOURTABLENAME YT
LEFT JOIN (
    SELECT COLUMN2
    FROM YOURTABLENAME
    WHERE COLUMN5 = 'C101808491229'
    ) C ON YT.COLUMN2 = C.COLUMN2

您可以简单地使用 MAX 如下:

MAX(CASE WHEN COLUMN5 = 'C101808491229' THEN 'YES' ELSE 'NO' END) 
 OVER (PARTITION BY COLUMN2) AS EXISTS

如果 C101808491229 存在那么它将 return YES 并且 max 将始终给出 YES 如果甚至有一个 YES 和其他 NO存在于分区中。