首页 > 解决方案 > MS Access (Office 365) 中的 SQL 查询的奇怪问题

问题描述

我最近继承了一个需要在 MS Access 数据库中运行查询的进程。昨天我偶然发现了以下奇怪的问题,我无法从逻辑上解释:

  1. 查询未在最新版本的数据库文件中运行(2021 年 8 月数据)
  1. 相同的查询在我从公司服务器下载的早期(2021 年 5 月)版本的数据库中运行良好(备份副本,可通过“早期版本”获得)
  1. 当我将数据从 Aug 文件复制到 May 文件时,查询运行良好。这让我认为问题不是数据问题。

我不确定在我之前制作报告的人是否对 August 文件做了什么,或者这是否是一个奇怪的计算机故障......

我知道如何解决这个问题(即通过将数据从 August 数据库复制到 May 数据库),但我不知道错误的原因。任何帮助将不胜感激!


SQL 查询代码(将美元转换为加元):

UPDATE T1_DEF_EXPENSETYPE_COST AS F1, SM_FX_MAVG AS F2 SET F1.CDE = F1.COA *  IIF( CURRENCY_TYPE = 'CAD',1, 
                              IIF(MID(F1.PERIOD,10,2) = '01',F2.[M12],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '02',F2.[M01],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '03',F2.[M02],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '04',F2.[M03],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '05',F2.[M04],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '06',F2.[M05],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '07',F2.[M06],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '08',F2.[M07],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '09',F2.[M08],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '10',F2.[M09],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '11',F2.[M10],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '12',F2.[M11],0)), F1.FX_PERIOD = MID(F2.PERIOD,4,4) & 
                              IIF(MID(F1.PERIOD,10,2) = '01','-M12','') & 
                              IIF(MID(F1.PERIOD,10,2) = '02','-M01','') & 
                              IIF(MID(F1.PERIOD,10,2) = '03','-M02','') & 
                              IIF(MID(F1.PERIOD,10,2) = '04','-M03','') & 
                              IIF(MID(F1.PERIOD,10,2) = '05','-M04','') & 
                              IIF(MID(F1.PERIOD,10,2) = '06','-M05','') & 
                              IIF(MID(F1.PERIOD,10,2) = '07','-M06','') & 
                              IIF(MID(F1.PERIOD,10,2) = '08','-M07','') & 
                              IIF(MID(F1.PERIOD,10,2) = '09','-M08','') & 
                              IIF(MID(F1.PERIOD,10,2) = '10','-M09','') & 
                              IIF(MID(F1.PERIOD,10,2) = '11','-M10','') & 
                              IIF(MID(F1.PERIOD,10,2) = '12','-M11',''), F1.FX_Rate = IIF( CURRENCY_TYPE = 'CAD',1, 
                              IIF(MID(F1.PERIOD,10,2) = '01',F2.[M12],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '02',F2.[M01],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '03',F2.[M02],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '04',F2.[M03],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '05',F2.[M04],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '06',F2.[M05],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '07',F2.[M06],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '08',F2.[M07],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '09',F2.[M08],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '10',F2.[M09],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '11',F2.[M10],0) + 
                              IIF(MID(F1.PERIOD,10,2) = '12',F2.[M11],0))
WHERE F1.COA IS NOT NULL AND 
          VAL(MID(F1.PERIOD,4,4)) = VAL(MID(F2.PERIOD,4,4)) + VAL(IIF(MID(F1.PERIOD,10,2) = '01',1,0))  AND 
          F2.BASE_RATE = 'CAD' AND F2.CURRENCY_CODE = 'USD';

标签: ms-accessms-access-2016mssql-jdbc

解决方案


推荐阅读