MS SQL Excel文件,Case语句或替代方案
MS SQL Excel文件,Case语句或替代方案
我有一个用于处理数据的Excel文件。数据以.csv文件的形式进入,我想要输出多个不同的工作表,每个工作表都以不同的方式处理数据。一旦初始设置完成,执行此任务的人将不是我。在探索了许多方法之后(例如设置SQL或Access数据库/使用读取和处理数据的Excel函数),我决定在导入.csv文件后,Excel文件自己查询。我通过以下方法找到了如何实现:\n如何在Excel表上运行SQL查询?\n我对SQL的方言不熟悉,我能找到的唯一参考是:\nhttps://support.microsoft.com/en-us/help/136699/description-of-the-usage-of-joins-in-microsoft-query\n这在大多数情况下都有效。在某些情况下,Jet SQL有效,但其他时候会返回错误。\n表中有三列,Cust Status,\'MinDateFiledBorrower\'和\'MinDateFiledCoBorrower\'。借款人和共同借款人的日期字段中可能有数据,也可能为NULL。我试图获取借款人和共同借款人的最早日期。我似乎找不到JetSQL中Case语句的语法,并且我尝试时收到的错误让我怀疑它们不被支持。\n数据:\n
Cust Status 'MinDateFiledBorrower' 'MinDateFiledCoBorrower' B-1001 9/15/2004 0:00 11/1/2006 0:00 B-1002 9/17/2004 0:00 11/9/2006 0:00 B-1003 10/7/2004 0:00 NULL B-1004 NULL 10/14/2004 0:00 B-1005 9/23/2004 0:00 12/21/2006 0:00 B-1007 10/19/2004 0:00 2/12/2007 0:00 B-1008 10/22/2004 0:00 2/8/2007 0:00 B-101 NULL 12/11/2001 0:00 B-1010 10/25/2004 0:00 NULL B-1011 10/28/2004 0:00 6/8/2007 0:00 B-1012 11/4/2004 0:00 6/28/2007 0:00 B-2298 5/12/2005 0:00 NULL B-23 NULL 2/26/2007 0:00 B-230 NULL 5/15/2012 0:00 B-2300 NULL 5/24/2005 0:00 B-2301 NULL 6/30/2005 0:00
\n我最近的尝试:\n
select `DischargeCombine$`.`Cust Status` ,`DischargeCombine$`.`'MinDateFiledBorrower'` ,`DischargeCombine$`.`'MinDateFiledCoBorrower'` ,case when `DischargeCombine$`.`'MinDateFiledBorrower'` is null then `DischargeCombine$`.`'MinDateFiledCoBorrower'` when `DischargeCombine$`.`'MinDateFiledCoBorrower'` is null then `DischargeCombine$`.`'MinDateFiledBorrower'` when `DischargeCombine$`.`'MinDateFiledBorrower'`>=`DischargeCombine$`.`'MinDateFiledCoBorrower'` then `DischargeCombine$`.`'MinDateFiledCoBorrower'` when `DischargeCombine$`.`'MinDateFiledBorrower'`<`DischargeCombine$`.`'MinDateFiledCoBorrower'` then `DischargeCombine$`.`'MinDateFiledBorrower'` end as FirstDischarge from `C:\Query Exports\BK Scrub Processing File.xlsx`.`DischargeCombine$` `DischargeCombine$`
\n返回错误“在SELECT列列表之后不希望出现\'DischargeCombine$
\'”。它没有行标记,但我猜它指的是Case语句中的第一个DischargeCombine$
。\n非常感谢您的帮助!
问题的出现原因是MS Access Jet/ACE SQL Engine不支持ANSI-92的CASE语句,因此需要寻找替代方法。解决方法是使用嵌套的IIF函数或者使用SWITCH函数。
具体的解决方法如下:
1. 使用嵌套的IIF函数:
select d.`Cust Status` , d.`'MinDateFiledBorrower'` , d.`'MinDateFiledCoBorrower'` , iif(d.`'MinDateFiledBorrower'` is null, d.`'MinDateFiledCoBorrower'`, iif(d.`'MinDateFiledCoBorrower'` is null, d.`'MinDateFiledBorrower'`, iif( d.`'MinDateFiledBorrower'` >= d.`'MinDateFiledCoBorrower'`, d.`'MinDateFiledCoBorrower'`, iif(d.`'MinDateFiledBorrower'` < d.`'MinDateFiledCoBorrower'`, d.`'MinDateFiledBorrower'`, null ) ) ) ) as FirstDischarge from `C:\Query Exports\BK Scrub Processing File.xlsx`.`DischargeCombine$` d
2. 使用SWITCH函数:
select d.`Cust Status` , d.`'MinDateFiledBorrower'` , d.`'MinDateFiledCoBorrower'` , switch(d.`'MinDateFiledBorrower'` is null, d.`'MinDateFiledCoBorrower'`, d.`'MinDateFiledCoBorrower'` is null, d.`'MinDateFiledBorrower'`, d.`'MinDateFiledBorrower'` >= d.`'MinDateFiledCoBorrower'`, d.`'MinDateFiledCoBorrower'`, d.`'MinDateFiledBorrower'` < d.`'MinDateFiledCoBorrower'`, d.`'MinDateFiledBorrower'` ) as FirstDischarge from `C:\Query Exports\BK Scrub Processing File.xlsx`.`DischargeCombine$` d
另外,需要注意的是,MS Access实际上是一个GUI界面,用于操作Jet/ACE引擎(.dll文件),可以用来查询Excel工作簿,也可以查询本地的Jet/ACE表,甚至可以查询CSV文件。事实上,不需要安装MSAccess.exe程序即可查询.mdb或.accdb文件,同样也可以查询.xls、.xlsx、.xlsm、.xlsb文件。
希望这可以帮到你!如果你在使用别名或子组时遇到其他错误,请尝试重新使用MS Access。