2011-08-09 75 views
1

我使用DBISAMIF ELSE與DBISAM SQL

SELECT((SUM(sales.sale_amount) 
+SUM(sales.vat_amount)) 
-SUM(payments.fee_amount)) 
AS Balance,account_details.id FROM account_details 
JOIN sales ON account_details.id = sales.account_id 
JOIN payments ON account_details.id = payments.account_id GROUP BY account_details.id 

但是運行下面的查詢中,有3種不同類型的銷售 - sales.sale_type等同於0,1或2,如果是0的正應該添加sale_amount和vat_amount,否則應使用ELSE負值。

我已經試過各種

IF(sales.sale_type=0) 

BEGIN 
... 
END 
ELSE 
BEGIN 
... 
END 

無果,只遇到錯誤的腳本甚至沒有捉迷藏。我不知道這些錯誤是否僅限於DBISAM,或者它是我的SQL。

任何幫助表示讚賞。

謝謝

+0

你環顧過那裏的支持論壇http://www.elevatesoft.com/forums?category=dbisam? –

回答

0

DBISAM有CASE語句嗎?

SELECT 
    CASE WHEN sales.sale_type=0 
     THEN SUM(sales.sale_amount) + SUM (sales.vat_amount) - SUM(payments.fee_amount) 
     ELSE SUM(sales.sale_amount) - SUM (sales.vat_amount) + SUM(payments.fee_amount) 
     END 
FROM 
    <blah> 
+0

謝謝你回來,是的,事實證明,DBISAM確實有CASE語句。但是,當我嘗試將任何聚合引入它們時,它就會失敗。它似乎也不喜歡包含CASE的查詢,我試圖將它們用在Delphi代碼中。我已經結束了將多個查詢運行到「內存表」並在代碼中進行計算等操作。 – gld22

+0

你能介紹一下聚合引入失敗的例子嗎?適當形成它不應該失敗。例如'SELECT CASE THEN SUM(<非聚合字段> ELSE 1-SUM(<非聚合字段>)END FROM表GROUP BY <聚合字段>'應該可以正常工作。 – MatBailie