2012-04-25 69 views
0

我有這個疑問,它似乎工作的大部分時間,但我仍然得到它空值,當我知道它應該返回的東西,SQL查詢工作有時

我開始select,那麼這個

(select sum(total) from orders 
     where customer = 9 
     and iscredit = 1 
     and isdeleted = false and not id = 1560) 

代碼的這種安寧使我獲得了客戶9的訂單總量,而不是當前訂單,就像以前的訂單總額一樣...也注意到iscredit = 1意味着這些是信用訂單。

接下來,我要添加這個查詢

(select sum(total) from orders 
     where customer = 9 
     and iscredit = 0 
     and isdeleted = false and not id = 1560) 

做同樣的事情,但iscredit爲0,因此訂單是沒有學分。

接下來我想什麼減去已支付與此查詢

- (select ifnull(sum(p.amount), 0) from payment p 
     inner join orders o 
     on p.order = o.id 
     where o.customer = 9) as previous 

因此,所有這一起我什麼查詢看起來像....

select 
(
    select sum(total) 
    from orders 
    where customer = 9 and iscredit = 1 and isdeleted = false and not id = 1560 
) 
+ 
(
    select sum(total) 
    from orders 
    where customer = 9 and iscredit = 0 and isdeleted = false and not id = 1560 
) 
- 
(
    select ifnull(sum(p.amount), 0) 
    from payment p 
     inner join orders o 
      on p.order = o.id 
    where o.customer = 9 
) as previous 

有沒有更好的方式來寫這個?

任何提示將不勝感激。

謝謝

回答

2

這樣的事情會把頭兩個總數合在一起。

(select sum(total) 
from orders 
where customer = 0 
and (iscredit = 1 or iscredit = 0) 
and isdeleted = false 
and not id = 1560) 

這將返回null對於沒有匹配行,所以你可能要添加:

(select ifnull(sum(total), 0) 
from orders 
where customer = 0 
and (iscredit = 1 or iscredit = 0) 
and isdeleted = false 
and not id = 1560) 

這可能是你的問題的根源。

+0

謝謝大衛,它的工作原理! – user979331 2012-04-25 15:16:06