2012-11-05 35 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工作表的方法,而不是直接從報告中引用它。儘管它起作用,但它並不是真正的建議。任何有權訪問該文件的用戶都可能會搞砸,這樣報告就會中斷。

相關問題