【问题标题】:GROUP BY CLAUSE USE按条款分组
【发布时间】:2015-03-29 05:41:30
【问题描述】:

我有一张表,其中包含不同的付款方式类型:支票、汇票、现金。我需要显示不同付款类型的细分,以下是我的查询。任何人都可以建议或评论如何以最佳方式做到这一点。

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 group-by


    【解决方案1】:

    如果您确实需要将输出作为列,那么您将需要使用 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
    

    【讨论】:

    • 谢谢,我只是想知道我是否可以使用 Rank() 函数而不是付款方式,任何反馈。
    【解决方案2】:

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      相关资源
      最近更新 更多