与 sum 一起的情况

Posted

技术标签:

【中文标题】与 sum 一起的情况【英文标题】:Case when along with sum 【发布时间】:2018-10-31 14:55:50 【问题描述】:

有一个额外的付款人称为工人补偿,我试图通过做 case when 声明将其作为工人补偿/责任。我正在尝试返回一行。您的帮助将不胜感激。

这是我的查询:

select distinct
    case when payer.class like 'Workers%' 
        then 'Workers Comp/Liability'
        else Payer.class
    end as Payer,
    sum(Payment.payment_at) AS SumOfPmt
from Payer inner join Payer.payerid = Payment.payerid 
where payer.class like 'Workers%'
Group By payer.class      

结果:

Payer | SumOfPmt Workers Comp/Liability | 558.76 Workers Comp/Liability | 167036.41

我想要什么:

Payer | SumOfPmt Workers Comp/Liability | 167595.17

【问题讨论】:

正如您对该 GROUP BY 所要求的那样,每个不同的 payer.class 将获得 1 行。你没有显示payer.class 列,所以很难说,但这就是正在发生的事情。相反,您希望聚合 CASE 语句的结果,因此只需 GROUP BY payerGROUP BY <same case statement here>。或者将未聚合的 SELECT 语句放入子查询中并在其上运行您的 GROUP BY。 是的。我有两个独特的付款人('Workers Comp' 和 'Workers Comp/Liability'),但他们应该只是一个 Worker Comp/Liability,这意味着 'Workers Comp' 是系统上的错字,我找不到办法将它们相加成一行。 【参考方案1】:

我会用GROUP BY 子句重复相同的CASE 表达式:

select (case when p.class like 'Workers%' 
             then 'Workers Comp/Liability'
             else p.class
        end) as Payer,
       sum(pay.payment_at) AS SumOfPmt
from Payer p inner join 
     Payment py
     on p.payerid = py.payerid 
where p.class like 'Workers%'
group by (case when p.class like 'Workers%' 
               then 'Workers Comp/Liability'
               else p.class
          end);

您不需要使用DISTINCT,因为它有GROUP BY

【讨论】:

你成功了。非常感谢您的帮助。【参考方案2】:

这将是您的查询的一种更简单的形式:

select 'Workers Comp/Liability' as Payer,
       sum(pm.payment_at) AS SumOfPmt
from Payer py inner join
     Payment pm
     on py.payerid = pm.payerid 
where py.class like 'Workers%';

您的WHERE 子句和CASE 表达式正在做同样的事情。只需要一个。

【讨论】:

以上是关于与 sum 一起的情况的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何在这种情况下将 .overlay 与 GeometryReader 一起使用?

在没有插件的情况下将 Google Analytics 与 Phonegap 2.1 一起使用?

在不使用 Selenium 的情况下将 ChromeDriver 与 WebDriverIO 一起使用

在没有连接 Servlet 的情况下将 JSP 与 Tomcat 一起使用

如何在没有冲突的情况下将 Mocha 和 Jest 与 TypeScript 一起使用?

在UITableViewStylePlain情况下sectionHeader可以与tableview一起滑动的解决方法