1

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)

できれば参考文献を教えてください。ありがとう!

4

1 に答える 1

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 シートをレポートから直接参照するのではなく、実際のデータベースにインポートする方法を検討します。動作しますが、あまりお勧めできません。ファイルにアクセスできるすべてのユーザーがファイルを台無しにして、レポートが壊れる可能性があります。

于 2012-11-28T09:16:46.020 に答える