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 に 1 つ以上の a_txn がある場合、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 に答える