按条款使用分组

GROUP BY CLAUSE USE

我的 table 有不同的付款方式类型:支票、汇票、现金。我需要显示不同付款类型的细目,以下是我的查询。谁能建议或评论如何以最佳方式做到这一点。

select 
  COUNT(T3.PAY_METHOD), 
  T1.CLAIM_ID
from TB1 T3 
JOIN TB2 T2 ON T3.CLAIM_ID = T2.CLAIM_ID
GROUP BY T3.PAYMENT_METHOD_CD

以下是输出列应该看起来

|CHECK|MONEY ORDER|CASHIER'S CHECK|CASH|CREDIT CARD|

显示通过 CHECK 收到的应用于特定 LIABLE INDIVIDUAL 的所有付款的总数。

sql 将是:

select T3.PAY_METHOD
, COUNT(T3.PAY_METHOD) records
from TB1 T3 
JOIN TB2 T2 ON T3.CLAIM_ID = T2.CLAIM_ID
GROUP BY T3.PAY_METHOD

您可以使用应用程序代码来格式化输出。

如果您确实需要将输出作为列,那么您将需要使用 SUM(case when method = '' then 0 else 1 end) 类型的解决方案。像这样。

select t1.claim_id, 
       sum(case when t3.pay_method = 'CASH' then 1 else 0 end) as "CASH",
       sum(case when t3.pay_method = 'MONEY ORDER' then 1 else 0 end) as "MONEY ORDER",
       sum(case when t3.pay_method = 'CHECK' then 1 else 0 end) as "CHECK",
  T1.CLAIM_ID
from TB1 T3 
JOIN TB2 T2 ON T3.CLAIM_ID = T2.CLAIM_ID
GROUP BY T1.CLAIM_ID

但是,如果您只希望将它们逐行显示,那就简单多了。

select T1.CLAIM_ID, T3.PAY_METHOD, COUNT(*)
from TB1 T3 
JOIN TB2 T2 ON T3.CLAIM_ID = T2.CLAIM_ID
GROUP BY T1.CLAIM_ID, T3.PAY_METHOD