MS SQL Excel of Excel 文件、案例陈述或替代

MS SQL Excel of Excel Files, Case Statements or Alternative

我有一个 excel 文件用于处理数据。它通过一个 .csv 文件进入,我想输出很多不同的工作表,每个工作表都以不同的方式处理数据。初始设置完成后,执行此任务的人将不是我。在探索了许多这样做的方法之后,(为读取和处理数据的 example/using excel 函数设置 SQL 或 Access 数据库)我选择了一个 Excel 文件查询导入 .csv 后本身。

我发现了如何使用以下方法: How to run a SQL query on an Excel table?

SQL的方言对我来说很陌生,唯一能找到的参考资料是: https://support.microsoft.com/en-us/help/136699/description-of-the-usage-of-joins-in-microsoft-query 在大多数情况下都有效。在某些情况下,Jet SQL 可以工作,但有时它会 returns 出错。

我在 table、客户状态、'MinDateFiledBorrower' 和 'MinDateFiledCoBorrower' 中有三列。日期字段中的一个或两个可能包含数据,或者其中一个可能为 NULL。我正在尝试获取借款人和共同借款人的最短日期。我似乎无法在 JetSQL 中找到 Case 语句的语法,而且我在尝试时收到的错误让我怀疑它们不受支持。

数据:

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

我最近的尝试:

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$`

Returns 错误 "Didn't expect 'DischargeCombine$' after the SELECT column list." 它没有行标记,但我猜它表示案例陈述的第一个 DischargeCombine$

如有任何帮助,我们将不胜感激!

MS Access Jet/ACE SQL 引擎不支持 ANSI-92 CASE 声明,其中我提出了 ticket 以及其他缺少的 ANSI 方法。

而不是CASE,考虑一个用于条件逻辑的嵌套IIF函数。下面的调整也使用短 table 别名来避免长而重复的标识符:

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

或者,考虑 SWITCH(从 VBA 借用的 Access SQL 特定方法):

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 实际上是 Jet/ACE 引擎(.dll 文件)的 GUI,您可以使用它来查询 Excel 工作簿,也可以查询本机 Jet/ACE tables,甚至查询CSV文件。事实上,不需要安装 MSAccess.exe 程序来查询 .mdb.accdb 以及 .xls, .xlsx, .xlsm, .xlsb 文件。