在Access 2007 SQL Select语句中使用IIF表达式

时间:2018-02-03 13:11:43

标签: ms-access ms-access-2007

我已经彻底地环顾四周寻找答案,但我不明白为什么我要做的事情不起作用:

我正在尝试构建一个查询来为连续表单提供数据。我试图获得类似银行对账单的东西,其中借方和贷方分别在不同的栏目中。我也想要一个跑步总数,但我还没有那么远。

这是我的疑问:

SELECT ACTransaction.*, TransactionCategory.TC_Description, 
TransactionCategory.TC_Sign, ACCategoryGroup.ACCG_Description, 
ACCategory.ACC_Description, ACCategoryClass.ACCC_Description, 
ACSubCategory.ACSC_Description,  IIf([TC_Sign]="-1",[ACT_ValTTC],"") AS 
Spend, IIf([TC_Sign]="1",[ACT_ValTTC],"") AS Receive
FROM TransactionCategory INNER JOIN (ACSubCategory INNER JOIN 
((ACCategoryClass INNER JOIN (ACCategoryGroup INNER JOIN ACCategory ON 
ACCategoryGroup.ACCG_ID = ACCategory.ACC_CategoryGroupID) ON 
ACCategoryClass.ACCC_ID = ACCategory.ACC_CategoryClassID) INNER JOIN 
ACTransaction ON ACCategory.ACC_ID = ACTransaction.ACT_CategoryID) ON 
ACSubCategory.ACSC_ID = ACTransaction.ACT_SubCategoryID) ON 
TransactionCategory.ID = ACTransaction.ACT_TransCategoryID;

有很多查找,但关键是我想把ACTransaction交易中的[ACT_ValTTC]放入'花费'或者'接收'根据[TC_Sign]的值可以是' 1'或者' -1' (它在系统的其他地方用作乘数)。

当查询运行时,我在列中得到#ERROR。最后的手段是填充温度。在我的表单中的表,并使用它作为表单的数据源,但效率非常低,特别是因为我必须重建temp。每次添加事务时都会显示表。我更愿意查询一下我可以Requery。请注意......这取决于在查询中构建运行总计有多难/不可能!

提前感谢任何指导。

1 个答案:

答案 0 :(得分:0)

错误的可能来源是引号。 "-1"是包含文本-1的字符串,而没有引号,它是一个值为-1的整数。如果您要将字符串与整数进行比较,则会出现错误,这就是您在列中获得#ERROR的原因。

省略引号,它可能会正常运行。

SELECT ACTransaction.*, TransactionCategory.TC_Description, 
TransactionCategory.TC_Sign, ACCategoryGroup.ACCG_Description, 
ACCategory.ACC_Description, ACCategoryClass.ACCC_Description, 
ACSubCategory.ACSC_Description,  IIf([TC_Sign]=-1,[ACT_ValTTC],"") AS 
Spend, IIf([TC_Sign]=1,[ACT_ValTTC],"") AS Receive
FROM TransactionCategory INNER JOIN (ACSubCategory INNER JOIN 
((ACCategoryClass INNER JOIN (ACCategoryGroup INNER JOIN ACCategory ON 
ACCategoryGroup.ACCG_ID = ACCategory.ACC_CategoryGroupID) ON 
ACCategoryClass.ACCC_ID = ACCategory.ACC_CategoryClassID) INNER JOIN 
ACTransaction ON ACCategory.ACC_ID = ACTransaction.ACT_CategoryID) ON 
ACSubCategory.ACSC_ID = ACTransaction.ACT_SubCategoryID) ON 
TransactionCategory.ID = ACTransaction.ACT_TransCategoryID;