当满足两个条件时,对SQL的值进行求和

3

我正在尝试创建一个查询,用于计算每个月的借方和贷方。这些值在名为SUM的列中,并且每条记录都有一个字段指示它是借方还是贷方(ex_type)。尽管我只是简单地对所有值进行求和而不管它们是借方还是贷方,但我已经成功获得了所有字段的总和(虽然这不正确)。

SELECT sum(sum) as total FROM acc where month='$month'

但我不知道如何处理信用卡和借记卡的情况。

因此,总结一下... 我想将以下两个查询合并为一个。

1. Select sum(sum) as Debit from acc where ex_type='Debit' and month='$month'
2. Select sum(sum) as Credit from acc where ex_type='Credit' and month='$month'

所以,非常感谢任何帮助。


1
这是mysql还是sql-server?您想要一个值返回(总计)还是三个(借方,贷方,总计)? - SteveB
6个回答

11

使用CASE尝试此操作

Select sum(CASE WHEN ex_type='Debit' THEN `sum` ELSE 0 END) as Debit,
sum(CASE WHEN ex_type='Credit' THEN `sum` ELSE 0 END) as Credit FROM ...

1
这应该可以工作:

Select sum(d.sum) as Debit, 
  (Select sum(c.sum) from acc c where c.ex_type='Credit' and c.month='$month') as Credit
from acc d where d.ex_type='Debit' and d.month='$month'

然而,如果您提供其他字段的更多详细信息,则可以使用内部连接到相同的表,并且可能会更有效率。


1

也许是重复的帖子:

使用不同条件基于SUM()的SELECT

尝试这个:

Select 
   SUM(CASE WHEN ex_type='Debit' THEN `sum` ELSE 0 END) as Debit,
   SUM(CASE WHEN ex_type='Credit' THEN `sum` ELSE 0 END) as Credit
FROM acc 
Where etc...

我看到了那篇帖子,但我认为它有点不同。 - lStoilov

1

我不是MySQL专家,但你可以尝试以下方法:

SELECT 
  SUM(CASE WHEN ex_type='Debit' THEN sum ELSE 0 END CASE) as SumOfDebit,
  SUM(CASE WHEN ex_type='Credit' THEN sum ELSE 0 END CASE) as SumOfCredit,
FROM acc
WHERE
  month = '$month'

如果MySQL 参考 5.0中的CASE语句无法按预期工作,则需要处理。


0
SELECT
    SUM(sum) as total
    SUM(IF(ex_type='Debit',sum,0)) Debit
    SUM(IF(ex_type='Credit',sum,0)) Credit
FROM acc 
WHERE month='$month'

0

最简单(也是最酷的)方法是:

SELECT 
  SUM((ex_type='Debit') * sum) Debit,
  SUM((ex_type='Credit') * sum) Credit,
FROM acc
WHERE month = '$month'

这个能工作是因为在mysql中,true表示1,false表示0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接