У меня есть таблица с такими данными:
create table test (transferID int, customerNumber varchar(10), txnstatus int);
insert into test
values
(1, 1001, 1),
(2, 1001, 2),
(3, 1001, 1),
(4, 1002, 2),
(5, 1002, 1),
(6, 1002, 2),
(7, 1002, 1),
(8, 1002, 1),
(9, 1003, 2),
(10, 1003, 1),
(11, 1003, 1),
(12, 1003, 1),
(13, 1003, 1),
(14, ' ', 1),
(15, ' ', 2),
(16, NULL, 2);
, и в качестве исключительного результата отображаются поля с номером клиента, общим количеством txns для каждого клиента, successTxns, failedTxns. Обратите внимание:
- txnStatus 1 и 2 представляют «успех» и «сбой» соответственно.
- номер клиента может быть пустым или НЕДЕЙСТВИТЕЛЕН в некоторых случаях как последние три строки
Вот как я пытался, но не получил ожидаемого результата
select customerNumber,
count(*) over (partition by 1) as TotalTxns,
case when txnstatus = 1 then count(txnstatus) else 0 end as successFulTrxn,
case when txnstatus = 2 then count(txnstatus) else 0 end as failedFulTrxn
from test
group by customerNumber, txnstatus
Я ожидаю, что результат будет:
CustNumber TotalTxns SuccessFulTxns FailedTxns
1001 3 2 1
1002 5 3 2
1003 5 4 1
2 1 1
NULL 1 0 1