Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL检查分区中是否存在两个值_Sql_Oracle - Fatal编程技术网

Oracle 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

尝试检查给定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 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         |
+-----------+----+-----------+