2012-10-03 75 views
1

我有兩個subquerys都計算總和。我想用Querys的結果做一個算術減號( - )。例如Query1:400 Query2:300結果應該是100.與2 Subquerys做數學

明顯的基本 - 在查詢中不起作用。減號的作品就像MINUS一樣。我該如何解決這個問題?你有什麼想法?

SELECT CustumersNo FROM Custumers WHERE 
(
SELECT SUM(value) FROM roe WHERE roe.credit = Custumers.CustumersNo 
- 
SELECT SUM(value) FROM roe WHERE roe.debit = Custumers.CustumersNo 
) 
> 500 

使用Informix - 遺憾錯過了這一點

+0

哪個SQL? SQL SERVER,MySQL等 – hims056

+0

這應該是與MySQL運營商正常工作,你使用什麼dbms? –

+0

您的語法看起來對ANSI/ISO SQL有效。你有問題嗎? – RBarryYoung

回答

1

要獲得原始的語法來工作,你就需要圍繞括號中的子選擇。但是,一組空行的SUM是NULL,而不是零。

你可以發明和設計的方法來總是有一個值在roe表中列出的每個客戶,如:

SELECT CustomersNo 
    FROM (SELECT CustomersNo, SUM(value) AS net_credit 
      FROM (SELECT credit AS CustomersNo, +value 
       UNION 
       SELECT debit AS CustomersNo, -value 
       ) AS x 
     GROUP BY CustomersNo 
     ) AS y 
WHERE net_credit > 500; 

你也可以做到這一點與適當的HAVING子句如果你想。請注意,這樣可以避免有信用分錄但沒有借項入帳的客戶出現問題,反之亦然。所有存在的條目都得到適當的處理。


'客戶'的拼寫錯誤(或非正統拼寫)幾乎與'costumers'一樣好。

+0

謝謝你的幫助。我很抱歉我的拼寫錯誤。 – Johannes

1

喜歡的東西,你應該嘗試什麼工作。這可能是一個語法問題,它可能取決於您正在使用的SQL類型。然而,像這樣的方法會更有效率:

更新:我看到你有一個空值的問題,所以我更新它來正確處理空值。

select CustumersNo from (
    select CustumersNo, 
      sum(coalesce(roecredit.value,0)) - sum(coalesce(roedebit.value,0)) 
       as balance 
     FROM Custumers 
     join roe roecredit on roe.credit = Custumers.CustumersNo 
     join roe roedebit on roe.debit = Custumers.CustumersNo 
     group by CustumersNo 
    ) 
    where balance > 500 

警告:我沒有專門針對Informix的經驗。該聚集體定義爲忽略他們在標準的SQL彙總值空

SELECT CustumersNo 
    FROM Custumers 
WHERE ((SELECT SUM(value) FROM roe WHERE roe.credit = Custumers.CustumersNo) 
     - 
     (SELECT SUM(value) FROM roe WHERE roe.debit = Custumers.CustumersNo) 
     ) > 500 

注:

+0

感謝您發佈此解決方案。 – Johannes