Oracle sql查询根据事务类型返回行。这用于分析目的
SELECT YEAR
, MONTH
, source
, count(distinct T.tx_id ) no_of_txn
, sum((CASE WHEN D.type = 1 THEN 1 ELSE 0 END )) A_TXN
, sum((CASE WHEN D.type = 2 THEN 1 ELSE 0 END )) d_TXN
FROM TXN_HEADER T , TXN_DETAIL D WHERE OPEN_AMT > 0
AND T.tx_id = D.tx_id (+)
AND T.tx_id in ( 23414, 23123)
GROUP BY YEAR,MONTH,source
输出
YEAR MONTH SOURCE NO_OF_TXN A_TXN D_TXN 2012 09 11 2 17 2
此处详细信息表中的总行数为19(17 +2)和标题2(2 Txn)
我所需的输出是总txn 2,a_txn 2和D_txn 2.这意味着如果txn超过1 a_txn,则对于D_txn,它将被视为1相同
最终预期产出
YEAR MONTH SOURCE NO_OF_TXN A_TXN D_TXN 2012 09 11 2 2 2
答案 0 :(得分:1)
您可以将COUNT
和DISTINCT
与表达式一起使用:它将计算表达式的所有distinct和not null实例。所以如果我理解你的要求,这应该做到这一点:
SELECT YEAR
, MONTH
, source
, count(distinct T.tx_id ) no_of_txn
, COUNT(DISTINCT CASE WHEN D.type = 1 THEN T.tx_id END) A_TXN
, COUNT(DISTINCT CASE WHEN D.type = 2 THEN T.tx_id END) d_TXN
FROM TXN_HEADER T , TXN_DETAIL D WHERE OPEN_AMT > 0
AND T.tx_id = D.tx_id (+)
AND T.tx_id in ( 23414, 23123)
GROUP BY YEAR,MONTH,source