2

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

输出

年月源 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 的 a_txn 超过 1 个,它将被视为与 D_txn 相同的 1

最终预期输出为

年月源 NO_OF_TXN A_TXN D_TXN
2012 09 11 2 2 2
4

1 回答 1

1

您可以将COUNTandDISTINCT表达式一起使用:它将计算所有不同且非空的表达式实例。因此,如果我正确理解您的要求,应该这样做:

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
于 2012-09-18T14:40:22.520 回答