sql - Excel 文件、案例陈述或替代方案的 MS SQL Excel
问题描述
我有一个用来处理数据的 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 语句的语法,而且我在尝试时收到的错误让我怀疑它们不受支持。
数据:
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$`
DischargeCombine$
返回错误“在 SELECT 列列表之后不期望 ' '”。它没有线标记,但我猜这意味着DischargeCombine$
Case Statement 的第一个。
任何帮助将不胜感激!
解决方案
MS Access Jet/ACE SQL 引擎不支持 ANSI-92CASE
语句,我在方言的其他缺失 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 文件。事实上,不需要安装 MSAccess.exe 程序即可查询.mdb
或.accdb
类似.xls, .xlsx, .xlsm, .xlsb
文件。
推荐阅读
- watir - 如何从页面对象页面部分内部访问父窗口?
- ios - 如何根据用户对图像的触摸获得 X 和 Y 坐标,这在任何设备上都是相同的
- scala - 初始化scala选项时“包无不是一个值”
- api - 使用 Graph API 将文件上传到 onedrive 而不显示身份验证
- javascript - 多个嵌套网格在单击时未展开
- command-line - 子字符串 windows 命令行
- html - 删除所有 html 标签的 sed 命令行故障
- sql - SQL:查找除指定字符之外的任何字符的第一次出现
- javascript - 文档对象在反应形式中未定义
- twitter-bootstrap - 手动更改用于打印的介质宽度