查询设计器报表生成器3.0中的条件语句

时间:2012-11-05 01:16:18

标签: sql

我正在使用带有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)

如果可能,请给我参考。谢谢!

1 个答案:

答案 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工作表的方法,而不是直接从报表中引用它。尽管它有效,但并不是真的值得推荐。任何有权访问该文件的用户都可以搞砸它,以便您的报告中断。