我正在使用带有Excel的报表生成器作为我的数据源。我很难在查询设计器中创建查询文本。当我尝试使用简单组语句的条件语句时,我会收到错误。
我有这样的声明:
SELECT [Flight No],[Full Name],[Date],[Selected Routing 1] AS Routing,
[Selected ETD 1] AS ETD,[Selected ETA 1] AS ETA
FROM [Sheet1$]
这将返回这些值:
Flight No Full Name Date Routing ETD ETA
1 Peter Hansen 10/1/2012 BNE-MEL 1755 2020
2 Black Hansen 10/2/2012 BNE-MEL 1756 2021+1
现在,我想创建一个条件语句,当ETA的数字为+1时,日期将增加1.因此表格应如下所示:
Flight No Full Name Date Routing ETD ETA
1 Peter Hansen 10/1/2012 BNE-MEL 1755 2020
2 Black Hansen 10/3/2012 BNE-MEL 1756 2021+1
当我在报表生成器中尝试使用这样的SQL语句时,我似乎遇到了错误:
SELECT [Flight No],[Full Name],If([Selected ETA 1] LIKE '*+*',[Date]+1,[Date])
AS DATE, [Selected Routing 1] AS Routing,[Selected ETD 1] AS ETD,
[Selected ETA 1] AS ETA
FROM [Sheet1$]
错误说:
An error occurred while executing the query.
ERROR [42000撛] [Microsoft][ODBC Excel Driver] Undefined function 'if' in expression.
(Microsoft SQL Server Report Builder)
ERROR [42000撛] [Microsoft][ODBC Excel Driver] Undefined function 'if' in expression.
(ACEODBC.DLL)
如果可能,请给我参考。谢谢!
答案 0 :(得分:0)
正如您在错误中看到的那样,IF函数尚未在该上下文中使用。实现这一目标的最佳选择是使用CASE代替:
SELECT [Flight No],[Full Name]
, CASE WHEN [Selected ETA 1] LIKE '*+*' THEN [Date]+1 ELSE [Date] END AS [DATE]
, [Selected Routing 1] AS Routing ,[Selected ETD 1] AS ETD,
[Selected ETA 1] AS ETA
FROM [Sheet1$]
请注意,您应避免使用保留关键字作为对象名称。我指的是你正在别名为[DATE]的那些列。 Date 是自SQL Server 2008以来的数据类型。
既然我们已经进入最佳实践方向,我也不会在对象名称中使用空格。它为您节省了每次编写查询时都需要输入方括号的麻烦。
为了完成,我将研究一种在真实数据库中导入Excel工作表的方法,而不是直接从报表中引用它。尽管它有效,但并不是真的值得推荐。任何有权访问该文件的用户都可以搞砸它,以便您的报告中断。