【问题标题】:Excel as database using SQL Server queries使用 SQL Server 查询将 Excel 作为数据库
【发布时间】:2019-02-05 13:39:09
【问题描述】:

我正在尝试使用 Excel 工作簿作为数据源运行以下查询,但我不明白 COALESCE 函数为何不起作用。查询是否有问题或 COALESCE 函数不适用于 Excel?

SELECT COALESCE([net value], 0) 
FROM   [sheet1$a1:e6] 
WHERE  [units] = 'UN03' 
UNION ALL 
SELECT COALESCE([net value], 0) 
FROM   [sheet1$a1:e6] 
WHERE  [units] = 'UN06' 
UNION ALL 
SELECT COALESCE([net value], 0) 
FROM   [sheet1$a1:e6] 
WHERE  [units] = 'UN04' 
UNION ALL 
SELECT COALESCE([net value], 0) 
FROM   [sheet1$a1:e6] 
WHERE  [units] = 'UN02' 
UNION ALL 
SELECT COALESCE([net value], 0) 
FROM   [sheet1$a1:e6] 
WHERE  [units] = 'UN01' 

似乎唯一有效的是下面的查询,但我无法返回输出,因为 IFF 函数只接受单引号内的值,例如,'true'、'false'。我试图返回这些值sheet1$.net value, '0',sheet1$.net value 包含查询输出,0 表示查询没有返回任何内容。谁能告诉我我做错了什么?

SELECT IIF(Count(`sheet1$`.`net value`) > 0, `sheet1$`.`net value`, '0') AS 
'Net Value' 
FROM   `sheet1$` `Sheet1$` 
WHERE  ( `sheet1$`.f1 = 'UN03' ) 

【问题讨论】:

  • 您使用的是哪个提供商:Jet、ACE、...?你试过IFNULL而不是COALESCE吗?
  • COALESCE 用于列表或多列,如果要更改/检查一项,请使用 IsNull,如SELECT IsNull([net value], 0)
  • 嘿安德鲁,我正在使用 Microsoft.ACE.OLEDB.12.0。我也试过 IFNULL 和 ISNULL。
  • 不确定这是否有助于提及,但您不应该费心将表别名为自己的名称:sheet1$` `Sheet1$

标签: sql excel


【解决方案1】:

您应该像编写 MS Access 一样编写查询。请参考此内容,其中有多种可供您关注的替代方案:

coalesce alternative in Access SQL

【讨论】:

  • 嘿@n8,我正在使用“IIF(Count([net value]) > 0,[net value], 0)”,但它不起作用。
  • 如果您在条件中执行聚合函数,那么您需要分组并在输出中包含聚合,例如 IIF(Count([net value]) > 0,Count([net value]), 0),或者不要聚合,例如 IIF([net value] > 0,[net value], 0)。混合这些可能会给您带来意想不到的结果。
  • 你试过 Nz 了吗?
  • 嘿,我之前尝试过 "IIF([net value] > 0,[net value], 0)" 但我得到了相同的结果;没有返回零。
  • Nz 是一个 Access (vba) 函数...Nz ( variant, [ value_if_null ] )
猜你喜欢
  • 2021-09-14
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 2012-11-23
相关资源
最近更新 更多