sql中的条件总和,根据字段中的条件从另一个表中获取正确的总和

Posted

技术标签:

【中文标题】sql中的条件总和,根据字段中的条件从另一个表中获取正确的总和【英文标题】:conditional sum in sql, get correct sum from another table based on a condition in a field 【发布时间】:2013-05-10 07:12:28 【问题描述】:

我有一张这样的表 (tbl1),其中“商店 3”的销售额不正确。

**date      store       sale**
Mar, 2013   store 1     100
Apr, 2013   store 1     80
Mar, 2013   store 2     70
Mar, 2013   store 3     125
Apr, 2013   store 3     80

正确的金额在另一个表(tbl2)中:

**date      store       sale**
Mar, 2013   store 3     140
Apr, 2013   store 3     170

现在,我需要编写一个生成如下结果的查询:

**store     total_sale**
store 1     180
store 2     70
store 3     310

我尝试了不同的方式来编写 CASE 语句,但总之我弄错了。我在这里简化了真正的问题,希望得到社区的帮助。谢谢!

【问题讨论】:

你的列date的数据类型是什么? 文本(指月份)。为什么重要? @saghar:你为什么要在文本列中设置日期。不要那样做。使用真正的date 数据类型。无论如何,您使用的是哪个 DBMS? Postgres? 【参考方案1】:

试试看,

SELECT  a.Store,
        COALESCE(c.TotalSale, b.TotalSale) AS TotalSale
FROM    (SELECT DISTINCT Store FROM Table1) a
        INNER JOIN
        (
            SELECT  Store, SUM(sale) TotalSale
            FROM    Table1
            GROUP   BY Store
        ) b ON a.Store = b.Store
        LEFT JOIN
        (
            SELECT  Store, SUM(sale) TotalSale
            FROM    Table2
            GROUP   BY Store
        ) c ON a.Store = c.Store
SQLFiddle Demo

【讨论】:

以上是关于sql中的条件总和,根据字段中的条件从另一个表中获取正确的总和的主要内容,如果未能解决你的问题,请参考以下文章

Sql-Server触发器,根据条件匹配另一个表中的字段

根据子表的条件修改主表的数据

根据sql中的条件从不同的表中选择一个值

根据 AS400 SQL 中的不同条件更新 SQL 中的相同字段

Laravel 雄辩的查询与条件下另一个表中的值的总和

SQL中的条件插入语句