У меня есть эта таблица с именем Online_Transaction, и я хочу показать все типы транзакций и сколько было сделано каждого типа (выполненных, отклоненных, ожидающих авторизации) в конкретном месяце. У меня есть этот запрос до сих пор, но я получаю повторяющиеся результаты какие-либо идеи?
SELECT DISTINCT
TRANSACTION_TYPE_ID ,
YEAR(CREATED_ON) AS YEAR ,
MONTH(CREATED_ON) AS MONTH ,
( SELECT
Count(TRANSACTION_TYPE_ID)
FROM
ONLINE_TRANSACTION
WHERE
ONLINE_TRANSACTION.STATUS_ID = 'COMPLETED' AND MONTH(CREATED_ON) = '2' ) AS COMPLETED ,
( SELECT
Count(TRANSACTION_TYPE_ID)
FROM
ONLINE_TRANSACTION
WHERE
ONLINE_TRANSACTION.STATUS_ID = 'DECLINED' AND MONTH(CREATED_ON) = '2' ) AS DECLINED ,
( SELECT
Count(TRANSACTION_TYPE_ID)
FROM
ONLINE_TRANSACTION
WHERE
ONLINE_TRANSACTION.STATUS_ID = 'FAILED' AND MONTH(CREATED_ON) = '2' ) AS FAILED ,
( SELECT
Count(TRANSACTION_TYPE_ID)
FROM
ONLINE_TRANSACTION
WHERE
ONLINE_TRANSACTION.STATUS_ID = 'PENDING_AUTH' AND MONTH(CREATED_ON) = '2' ) AS PENDING_AUTH
--(SELECT Count(*) from )
FROM
ONLINE_TRANSACTION
WHERE
MONTH(CREATED_ON) = '2'
GROUP BY
TRANSACTION_TYPE_ID ,
ONLINE_TRANSACTION.CREATED_ON
И я получаю эти результаты:
TRANSACTION_TYPE_ID YEAR MONTH COMPLETED DECLINED FAILED
------------------------------------ ----------- ----------- ----------- ----------- -------
INSURANCE--TYPE 2009 2 9712 177 0
CHEQUEBOOK-TYPE 2009 2 9712 177 0
CHEQUE-STOP-YPE 2009 2 9712 177 0
PAYMENT-TRANS-TYPE 2009 2 9712 177 0
DOMESTIC-TRANSFER-TYPE 2009 2 9712 177 0
PAYMENT-TRANS-TYPE 2009 2 9712 177 0
INTRA-ACCOUNT-TRANS-TYPE 2009 2 9712 177 0
INTRA-BANK-TRANS-TYPE 2009 2 9712 177 0
STANDING-ORDER-TYPE 2009 2 9712 177 0
STATEMENT-REORDERING TYPE 2009 2 9712 177 0
PAYMENTS-TRANS-TYPE 2009 2 9712 177 0
Как видите, результаты повторяются, если в таблице должны быть разные значения.
Есть идеи?
Попробовав ответы ниже, вот что я получаю:
этот тип набора результатов - он отображает разные результаты для каждого типа транзакции в разных строках, так что если, скажем, тип транзакции - внутрипередача, и у меня 10 выполненных и 2 отклоненных, то он будет отображать выполненные в одной строке, а отклоненные в другой как вы показываете это в одной строке для типа транзакции
TRANSACTION_TYPE_ID YEAR MONTH REJECTED COMPLETED POSTED
ALPHA-INSURANCE-TRANS-TYPE 2009 2 0 12 0
CHEQUEBOOK-ORDER-TRANS-TYPE 2009 2 0 0 0
CHEQUEBOOK-ORDER-TRANS-TYPE 2009 2 0 52 0
CHEQUEBOOK-ORDER-TRANS-TYPE 2009 2 2 0 0
CHEQUE-STOP-TRANS-TYPE 2009 2 0 3 0
PAYMENT-TRANS-TYPE 2009 2 0 361 0
PAYMENT-TRANS-TYPE 2009 2 1 0 0
DOMESTIC-TRANSFER-TRANS-TYPE 2009 2 0 0 0
DOMESTIC-TRANSFER-TRANS-TYPE 2009 2 0 541 0
DOMESTIC-TRANSFER-TRANS-TYPE 2009 2 6 0 0
Запрос выглядит так:
SELECT DISTINCT
TRANSACTION_TYPE_ID ,
YEAR(CREATED_ON) AS YEAR ,
MONTH(CREATED_ON) AS MONTH ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-REJECTED ' THEN 1
ELSE 0
END) AS REJECTED ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-COMPLETED ' THEN 1
ELSE 0
END) AS COMPLETED ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-DECLINDED ' THEN 1
ELSE 0
END) AS DECLINED ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-FAILED' THEN 1
ELSE 0
END) AS FAILED ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-PENDING-AUTH ' THEN 1
ELSE 0
END) AS PENDING_AUTH ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-PENDING-POST ' THEN 1
ELSE 0
END) AS PENDING_POST ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'STATUS-TRANS-PENDING' THEN 1
ELSE 0
END) AS PENDING ,
SUM(CASE ONLINE_TRANSACTION.STATUS_ID
WHEN 'ALPHA-STATUS-TRANS-POSTED' THEN 1
ELSE 0
END) AS POSTED
FROM
ONLINE_TRANSACTION
WHERE
MONTH(CREATED_ON) = '2'
GROUP BY
TRANSACTION_TYPE_ID ,
YEAR(CREATED_ON) ,
MONTH(CREATED_ON) ,
STATUS_ID