2013-03-18 35 views
0

我正在創建一張發票表,將每個項目分成幾年,並使用Toad for Oracle進行查詢。在發票上創建數量*價格的適當總和時出現問題

什麼我目前做的是使用相同的FROM和WHERE子句作爲我的觀點(因爲這數據來自多個表)

Select DISTINCT 
SUM(Credits * Credit_Price) as "Cost", to_char(START_DATE, 'YYYY') as "YEAR", 
PERSON_ID, ITEM_TYPE 
[...] 
WHERE 
[...] 
to_char(START_DATE, 'YYYY') = '2012' 

當我看到在查看費用我會創造我看到適當的人的成本爲0,100和0的條目,

但是如果我做SUM/GROUP BY(按item_type,person_id和to_char(START_DATE,'YYYY')分組),我得到一個成本3860700爲同一個人!

關於如何解決這個問題的任何想法,所以我得到100而不是3860700?

編輯︰所以基本上我想要一個數量*成本,但總結它,所以我得到該項目類型的總數(而不是對同一項目有多個行)。

+0

如果刪除了 「DISTINCT」 你還得到3行:0,100,0?或者你有更多的行? – joelt 2013-03-18 14:15:48

+0

如果我切換到我的視圖(這是相同減去SUM/GROUP BY語句),並刪除DISTINCT我得到很多(超過2K)行看起來... 如果我從SUM查詢中刪除差異我仍然當然只是得到一個。 – James 2013-03-18 14:18:18

+1

獨特可能是隱藏了一個連接中的錯誤 - 沒有看到您的代碼,很難提供幫助。 – 2013-03-18 14:27:33

回答

0

在SQL SELECT distinct sum()將不會歸納不同的值,所以你需要先選擇不同的值,然後總結起來:

Select 
SUM(Credits * Credit_Price) as "Cost", to_char(START_DATE, 'YYYY') as "YEAR", 
PERSON_ID, ITEM_TYPE 
[...] 
from (select DISTINCT Credits , Credit_Price, START_DATE,PERSON_ID, ITEM_TYPE 
[...]) 
WHERE 
[...] 
to_char(START_DATE, 'YYYY') = '2012' 

或把不同的這樣的總和內:

Select 
SUM(DISTINCT Credits * Credit_Price) as "Cost", to_char(START_DATE, 'YYYY') as "YEAR", 
PERSON_ID, ITEM_TYPE 
[...] 
WHERE 
[...] 
to_char(START_DATE, 'YYYY') = '2012' 

請注意,2個選項不是平等的,你想總結不同的積分,Credit_Price 或獨特的Credits * Credit_Price?

See sqlfiddle example

+0

啊,這是有道理的,sqlfiddle的例子很有幫助謝謝! 嗯,好,每一行都有單筆交易的信用和信用價格,我想爲所有交易加起來的成本......想不到我想要哪一個。 – James 2013-03-18 14:36:55

+0

我似乎已經找到了你的幫助,並做了更多的測試,非常感謝! – James 2013-03-18 14:40:49