繁体   English   中英

Excel 文件、Case 语句或替代的 MS SQL Excel

[英]MS SQL Excel of Excel Files, Case Statements or Alternative

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

我发现了如何使用以下方法: 如何在 Excel 表上运行 SQL 查询?

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

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

数据:

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

返回错误“在 SELECT 列列表之后没有想到 ' DischargeCombine$ '。” 它没有线标记,但我猜这意味着 Case Statement 的第一个DischargeCombine$

任何帮助将不胜感激!

MS Access Jet/ACE SQL 引擎不支持 ANSI-92 CASE语句,我在其他缺少的 ANSI 方言方法中提出了一张票

而不是CASE ,考虑一个用于条件逻辑的嵌套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

或者,考虑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 表,甚至查询 CSV 文件。 事实上,查询.mdb.accdb以及.xls, .xlsx, .xlsm, .xlsb文件并不需要安装MSAccess.exe 程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM