SQL WHERE子句未过滤到标准MS-Access

时间:2018-07-17 14:29:41

标签: sql ms-access

我写了一个查询来收集两个不同天的余额,找到百分比差异,然后显示它们。我在表单中添加了“百分比过滤器”部分,以仅显示为>=所需百分比的值。

运行查询时,得到的结果是给出的>=%。但是,满足条件后,结果将扩展到0为止,就像忽略了我的WHERE子句一样。我的查询中没有发现什么内容?

正在使用查询:

SELECT [x].[ID], [x].[Name], [x].[Day1Date], [x].[Day1Bal], [x].[Day2Date], [x].[Day2Bal], [x].[Difference], IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])*100),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)*100)) AS PerDiff

FROM qryUnion AS x

WHERE IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])*100),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)*100)) > [Forms]![Compare]![txtPercent]

ORDER BY IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])*100),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)*100)) DESC

我已经无数次地编辑并重写了IIf语句,但是它仍然无法正确过滤条件。

结果(已过滤>= 10%):

+----------+
| PerDiff  |
+----------+
| 985.256  |
| 457.25   |
| 369.54   |
| 245.21   |
| 141.14   |
| 68.23    |
| 28.54    |
| 10.21454 |
| 10.1212  | <------- Criteria met
| 9.555    |
| 8.42     |
| 2.12     |
| 0.42     | <------- Ends at 0
+----------+

很显然,我希望它在满足条件的地方结束,我相信我已经写了where子句来做到这一点。我不确定还有什么地方会搞砸。

qryUnion是一个子查询,但是我只是为了获取Dates和DateBals而编写的。

任何帮助将不胜感激!我对SQL(和VBA)还是有点陌生​​。预先感谢!

EDIT1:

我也尝试过

 WHERE IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])*100),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)*100)) >= [Forms]![Compare]![txtPercent] _ 
AND NOT IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])*100),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)*100)) < [Forms]![Compare]![txtPercent]

不显示任何小于给定百分比的数据。这条线不起作用。我的WHERE子句可能不是问题吗?我不确定问题可能还在哪里。

2 个答案:

答案 0 :(得分:0)

*可能存在更好的答案,但这也可以实现您的目标:

您可以在编写最终查询之前为PerDiff字段创建子查询:

SELECT [x].[ID], [x].[Name], [x].[Day1Date], [x].[Day1Bal], [x].[Day2Date], [x].[Day2Bal], [x].[Difference], IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])*100),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)*100)) AS PerDiff

FROM qryUnion AS x

然后,创建此子查询将为您提供select子句中iff语句的结果,该结果可在下一个查询中使用。因此,您的最终查询可以使用如下的Where子句:

WHERE PerDiff > [Forms]![Compare]![txtPercent]
ORDER BY PerDiff DESC

答案 1 :(得分:0)

经过大量的麻烦排除后,看来我的问题是我的IIf语句中的* 100

有效的SQL:

SELECT [x].[DDANbr], [x].[Name], [x].[Day1Date], [x].[Day1Bal], [x].[Day2Date], [x].[Day2Bal], [x].[Difference], IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1))) AS PerDiff

FROM qry250CapAllCompare_Union AS x
--Added /100 at the end of WHERE clause to ensure that I was getting 10% because math
WHERE IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1)))>=Forms!frmCompare!txtPercent/100

ORDER BY IIf(([Day2Bal]>[Day1Bal]),((([Day2Bal]-[Day1Bal])/[Day1Bal])),(((([Day2Bal]-[Day1Bal])/[Day1Bal])*-1))) DESC