2011-08-09 101 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