繁体   English   中英

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

[英]Conditional statements in query designer report builder 3.0

我正在将报表生成器与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)

如果可以的话请给我参考。 谢谢!

正如您在错误中看到的那样,尚未实现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]的列。 从SQL Server 2008开始, 日期是一种数据类型。

既然我们已经进入了最佳实践的方向,那么我也不会在对象名称中使用空格。 这样省去了编写查询时每次都要键入这些方括号的麻烦。

最后,我将研究一种在实际数据库中导入Excel工作表的方法,而不是直接从报表中引用它。 即使有效,也不推荐使用。 有权访问该文件的任何用户都可以将其弄乱,从而导致报告中断。

暂无
暂无

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

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