2014-02-20 42 views
1

我有一個表,其數據是像SUM唯一不同的值給予一定的標準SQL

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),並一直試圖找出這個無濟於事。

感謝您的幫助提前

Claudy

回答

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 
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()產生錯誤的值。

+0

我不知道你可以SUM截然不同。爲什麼這樣做很糟糕? – Peter

+1

* @ Gordon Linoff *,我不認爲SUM(DISTINCT m.Price)會在MS Access中工作。我剛剛嘗試過您的查詢並收到錯誤:在查詢表達式Sum(DISTINCT m.Price)''中出現語法錯誤(缺少運算符)。 – Linger