Oracle SQL检查分区中是否存在两个值
尝试检查给定id的数据类型“G”和“J”是否存在,如果为true,则显示“两者”,否则输出数据类型。如能提供SQL语句方面的帮助,将不胜感激Oracle SQL检查分区中是否存在两个值,sql,oracle,Sql,Oracle,尝试检查给定id的数据类型“G”和“J”是否存在,如果为true,则显示“两者”,否则输出数据类型。如能提供SQL语句方面的帮助,将不胜感激 SELECT data_type, id, max(case when data_type= 'G' and data_type= 'J' then 'Both' else data_type end) over (partition by id order
SELECT
data_type,
id,
max(case
when data_type= 'G' and data_type= 'J' then 'Both'
else data_type
end) over (partition by id order by id) as
condition
FROM my_table;
期望输出
+-----------+-----+-----------+
| data_type | id | condition |
+-----------+-----+-----------+
| J | A | Both |
| J | A | Both |
| G | A | Both |
| J | A | Both |
| J | B | J |
| J | B | J |
| J | B | J |
+-----------+-----+-----------+
假设只有“G”和“J”两个,则可以使用分析函数和case
逻辑:
select t.*,
(case when sum(case when data_type = 'G' then 1 else 0 end) over (partition by id) > 0 and
data_type = 'J'
then 'Both'
when sum(case when data_type = 'J' then 1 else 0 end) over (partition by id) > 0 and
data_type = 'G'
then 'Both'
else data_type
end) as condition
from my_table t;
使用
解码
和计数(不同…
窗口功能。即
SELECT t.*,
DECODE(count(distinct data_type) over ( partition by id),
1, data_type,
2, 'Both'
) condition
FROM test_data t;
范例
with test_data ( data_type, id ) AS (
SELECT 'J','A' FROM DUAL UNION ALL
SELECT 'J','A' FROM DUAL UNION ALL
SELECT 'G','A' FROM DUAL UNION ALL
SELECT 'J','A' FROM DUAL UNION ALL
SELECT 'J','B' FROM DUAL UNION ALL
SELECT 'J','B' FROM DUAL UNION ALL
SELECT 'J','B' FROM DUAL)
SELECT t.*, DECODE(count(distinct data_type) over ( partition by id), 1, data_type, 2, 'Both') condition
FROM test_data t;
+-----------+----+-----------+
| DATA_TYPE | ID | CONDITION |
+-----------+----+-----------+
| G | A | Both |
| J | A | Both |
| J | A | Both |
| J | A | Both |
| J | B | J |
| J | B | J |
| J | B | J |
+-----------+----+-----------+