子查询中的条件 - 如果子查询返回2个记录,则选择一个值,否则返回实际值

时间:2017-02-15 05:58:41

标签: sql oracle

我在一个大查询中有一个subquery,它会在某个时间返回多个值,有时只返回一个值。以下是我的查询和返回值

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"

这里我的探测器是如果我有2条记录我必须打印没有NA的值,如果我有一条记录我必须打印什么是值

1 个答案:

答案 0 :(得分: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)