【问题标题】:SUM only distinct values given certain criteria SQL在给定特定条件 SQL 的情况下,仅对不同的值求和
【发布时间】:2014-02-20 15:59:21
【问题描述】:

我有一张 Data 类似的表格

LayerID       Company id  Company name    Layer Name   Price
     1           1             x            x1          20
     2           1             x            x2          10 
     3           2             y            y1          50
     4           2             y            y2          50
     5           2             y            y3          50
     6           3             z            z1          15

我想要的是在应用 SQL 查询后拥有下表

Company id  Company name     Price
     1           x            30
     2           y            50 
     3           z            15

即以下规则适用:

  1. 如果公司不同层的价格不同,那么总结一下 例如:对于 x 公司,它将是 20+10 = 30
  2. 如果公司不同层的价格相同,则取该数字 例如:对于公司 y,它将是 50,对于 z,它将是 15

我不确定我会如何在 SQL(用于 Access/VBA)中这样做,并且一直试图解决这个问题但无济于事。

提前感谢您的帮助

克劳迪

【问题讨论】:

    标签: sql excel vba ms-access subquery


    【解决方案1】:

    将产生您正在寻找的结果的 SQL 查询:

    SELECT m.Company_id, m.Company_name, SUM(m.Price)
    FROM 
    (
      SELECT DISTINCT Company_id, Company_name, Price
      FROM MyTable 
    ) AS m
    GROUP BY m.Company_id, m.Company_name
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      SELECT m.Company_id, m.Company_name, SUM(distinct m.Price)
      FROM table m
      GROUP BY m.Company_id, m.Company_name;
      

      作为警告:我从不使用sum(distinct)。它通常表示底层数据结构或生成数据的子查询中有错误。

      编辑:

      为什么这样做不好?一般来说,你真正想要的是:

      SUM(m.Price) where <some id> is distinct
      

      但是你不能在没有子查询的情况下用 SQL 来表达它。如果以上是您想要的,那么当两个“id”具有相同的价格时,您就会遇到问题。 sum() 产生错误的值。

      【讨论】:

      • 我不知道你可以对不同的值求和。为什么这样做如此糟糕?
      • @Gordon Linoff,我认为SUM(DISTINCT m.Price) 不能在 MS Access 中使用。我刚刚尝试了您的查询并收到错误:Syntax error (missing operator) in query expression 'Sum(DISTINCT m.Price)'.
      猜你喜欢
      • 2021-11-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多