[英]MS-ACCESS / SQL - How to apply where clause in multiple conditions
[英]SQL WHERE Clause not filtering to criteria 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)還是有點陌生。 提前致謝!
編輯1:
我也嘗試過
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子句可能不是問題嗎? 我不確定問題可能還在哪里。
*可能存在更好的答案,但這也可以實現您的目標:
您可以在編寫最終查詢之前為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
經過大量的麻煩排除后,看來我的問題是我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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.