给定某些条件SQL时,SUM仅为不同的值

时间:2014-02-20 15:59:21

标签: sql excel vba ms-access subquery

我有一个数据就像

的表
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
  3. 我不确定我会如何在SQL(对于Access / VBA)中这样做,并且一直试图弄清楚这一点无济于事。

    感谢您的提前帮助

    Claudy

2 个答案:

答案 0 :(得分:3)

将产生您要查找的结果的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

答案 1 :(得分: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()生成错误的值。