2017-06-22 5 views
1

ODBC接続を介して大規模なOracleデータウェアハウスからExcelプルデータを使用しようとしています。私はAccessでエディタを使って動作するクエリを持っています。 Power QueryとMicrosoft SQLを使用してこのデータをExcelに取得しようとしましたが、エラーが発生しました。Excel OBDC - SQLクエリ

したがって:

  1. エクセルから実行されたSQLは、別の構文にする必要がありますか?それはまだOracleではありませんか?
  2. この事前書き込みクエリを使用してデータウェアハウスにpingを実行し、必要なものを取得するにはどうすればよいですか?

これまで私が持っていたSQLがあります。私はいくつかのテーブル名を変更しなければならなかった...それが奇妙になる場合は申し訳ありません。

SELECT Trim([xx]) & " - " & Trim([x]) AS Part, Trim([xxx]) & " - " & Trim([xxxxx]) AS WBSE, field1, field2, IIf(IsNull([field3]),[field4],[field6]) AS SeqDate, 
Val([anotherfield]) AS Serial, field7, Val([ORDR_NO]) AS [Order], 
field8, Sum(IIf(Not (IsNull([field10])),[foo1],0)) AS CMP_TOT_HRS, 
Sum(IIf(Not (IsNull([foo2])),[foo3],0)) AS hrs, Sum(IIf(IsNull([foo4]),[foo5],0)) AS WIP_TOT_HRS, 
Sum(IIf(IsNull([foo6]),[QNDT_ACTUAL_HRS],0)) AS WIP_RWK_HRS 

FROM ((table1 INNER JOIN table1 ON table2 = table2.xx) INNER JOIN table3 ON table3ID = table3ID) 
INNER JOIN (table4 RIGHT JOIN table5 ON table4.id = table5.id) ON table6.no = table6.no 

GROUP BY Trim([xx]) & " - " & Trim([xxxx]), Trim([xxxxxxxx]) & " - " & Trim([xxxxxxxxxx]), 
table01, table02, IIf(IsNull([table01]),[table02],[table01]), 
Val([serno]), table03, Val([ORDR_NO]), table04 

HAVING (((Trim([xx]) & " - " & Trim([xxxx])) Like "228K629*" Or (Trim([xx]) & " - " & 
    Trim([xxxx])) Like "815R920*" Or (Trim([xx]) & " - " & Trim([xxxx])) Like "115K956*" Or (Trim([xx]) & " - " & 
    Trim([xxxx])) Like "212K517*" Or (Trim([xx]) & " - " & Trim([xxxx])) Like "115K959*" Or (Trim([xx]) & " - " & 
    Trim([xxxx])) Like "212K585*" Or (Trim([xx]) & " - " & Trim([xxxx])) Like "115K958*" Or (Trim([xx]) & " - " & 
    rim([xxxx])) Like "125K268*" Or (Trim([xx]) & " - " & Trim([xxxx])) Like "160K477*") AND ((Trim([xxxxxxxxx]) & " - " 
    & Trim([xxxxxxxxxxxxxx])) Like "*foo*") AND ((lasttable)="foo")) 

ORDER BY IIf(IsNull([table01]),[table02],[table1]), Val([serno]); 
+0

「パススルークエリ」の設定を探していると思います。あなたのセットアップにどこに配置されているかわからない。 – Sam

+0

パススルークエリオプション(Access)が選択されていませんでした。元のクエリはPTQとして書き込まれ、次にExcelにコピーされる必要がありますか? 目的はAccessを完全に避け、Excelを使用してデータウェアハウスから必要なものを照会することです。 SQLクエリを実行するためにVBAコードを使用できることはわかっていますが、私はVBAでかなり貧弱ですので、これを回避したいと思います(少なくとも今のところは) – bm0r3son

+0

これは、使用しているドライバによって異なります。あなたの質問を共有する - 私はそれが他の人を助けるのに役立つと思う。 – Sam

答えて

1

投稿したSQLには、アクセス固有の機能が使用されています。これは、Oracleに対して直接実行される場合、有効なSQL問合せではありません。 Accessにリンクテーブルがたくさんある場合は、これが許可されます。

ExcelでのODBCデータソース接続は、動作が異なります。 ODBCは、データソースで直接クエリを実行します。いくつかの検証を先に行い、出力先でサポートされているSQL言語の一部をサポートしています。サブセットに含まれる内容は、接続用に選択されたドライバによって部分的に決定されます。

だから、Quest ToadやOracle SQL DeveloperなどのOracle環境で直接クエリを構築できるツールを使用してください。クエリがそこで動作したら、Excelに移植する方が簡単です。

私が気に入っていることの1つは、自分のクエリをデータベース上のビューに置くことです。次に、Excel接続を作成するときに、ビューからすべてを選択できます。

また、[マイデータソース]フォルダを指す価値があります。 Excelで最初にODBC接続をセットアップすると、Windowsの接続は、ユーザープロファイルフォルダのすぐ下にある「My Data Sources」というフォルダに保存されます。たとえば、C:\Users\UserName\My Data Sources\Data Source Name.odcです。

これらの*.odcファイルはテキストエディタで開くことができます。ここでSQLを手動で編集できる必要があります。特に<odc:CommandText>要素を探します。このようにして、単純なクエリを作成し、お気に入りの環境でSQLコマンドを改善し、更新されたSQLを既存のODBC接続に簡単に移動できます。

+0

あなたの答えにJoel Coehoornを感謝します。間違いなく問題を解決しました。 – bm0r3son

関連する問題