使用 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
存在于分区中。
我有以下一组数据。
我的目标是当分区 (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
存在于分区中。