首页 > 解决方案 > 如何在 CASE WHEN 或 IF 中选择不同的计数?

问题描述

我希望和每个人都很好,我有一个每周计数,我有 id_txn,付款方式和付款方式,但我有一个例外,那就是当我有一个特定的场景时,我希望它被添加到另一种付款方式。

字段

| id_txn | way_pay | payment_meth |
  123435 | gateway | transfer    
  433564 | on-site | cash
  354641 | gateway | cash 
  124553 | paypal  | transfer

我希望当 way_pay = gateway 和 payment_meth = transfer 时,将计数添加到 paypal / transfer

我的查询

select distinct way_pay, payment_meth,
  count(id_txn) as ttl_pays
from 
  pays
where 
  trunc(init_date) between trunc(to_date('date'))
case 
  when way_pay = 'gateway' and payment_meth = 'transfer' 
  then + pay_pal/transfer

group by way_pay, payment_meth;

标签: oraclespring-boot

解决方案


下面的 case 语句将在way_pay'gateway' 或 'paypal' 时返回 'paypay',并且payment_meth是 'transfer',否则返回way_pay。group by 也需要相同的语句。

如果你想要一个不同的 txn_id 计数,那么distinct应该将它移到 count 函数中。

select 
  case when way_pay in ('gateway','paypal') and payment_meth = 'transfer' then 'paypal' else way_pay end way_pay,
  payment_meth,
  count(distinct id_txn) as ttl_pays
from 
  pays
where
  init_date between trunc(sysdate-7) and trunc(sysdate)
group by
  case when way_pay in ('gateway','paypal') and payment_meth = 'transfer' then 'paypal' else way_pay end,
  payment_meth

推荐阅读