2017-02-15 25 views
0

我在一个大查询中有一个subquery,它在某个时间返回多个值,某些时候只返回一个值。下面是我的查询和返回值子查询中的条件 - 如果子查询返回2记录,则选择一个值其他实际值

select tran.customer_type from transaction_record tran where tran.TRANSACTION_ID=txn.id 

CUSTOMER_TYPE可以2条 - “LP” 和 “NA”

CUSTOMER_TYPE可以2条 - “ SOEMTHING ELSE“和”NA“

CUSTOMER_TYPE可以是1点的记录 - “NA”

这里我probem是,如果我有2条无我有NA打印值,如果我有一个记录我必须打印永远是什么值为

回答

1

效率不高(2查询),但它应该工作!

内部查询统计每个组的状态,ID组合和外部查询 删除在同一ID上具有另一个记录的所有NA状态。

最内层查询只是表模拟(我喜欢它比创建表,插入脚本更多)。

SELECT * FROM 
     (
       SELECT status, id, count(*) 
       OVER (PARTITION BY id ORDER BY 3) AS rn 
       from (
         SELECT 'NA' status, 1 id FROM dual 
         UNION ALL 
         SELECT 'LP' status, 1 id FROM dual 
         UNION ALL 
         SELECT 'NA' status, 2 id FROM dual 
         UNION ALL 
         SELECT 'SOEMTHING ELSE' status, 2 id FROM dual 
         UNION ALL 
         SELECT 'NA' status, 3 id FROM dual 
         UNION ALL 
         SELECT 'NA' status, 5 id FROM dual 
         UNION ALL 
         SELECT 'LP' status, 5 id FROM dual 
         UNION ALL 
         SELECT 'NA' status, 6 id FROM dual 
         UNION ALL 
         SELECT 'SOEMTHING ELSE' status, 6 id FROM dual 
         UNION ALL 
         SELECT 'NA' status, 22 id FROM dual 
        )) 
    WHERE NOT (status = 'NA' AND rn=2)