2012-11-05 26 views
1

我正在使用Excel作为数据源的报表生成器。我很难在查询设计器中创建查询文本。当我尝试简单组语句的条件语句时出现错误。查询设计器报表生成器3.0中的条件语句

我有这样的说法:

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

正如您在错误中看到的那样,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工作表的方法,而不是直接从报告中引用它。尽管它起作用,但它并不是真正的建议。任何有权访问该文件的用户都可能会搞砸,这样报告就会中断。

相关问题