Excel OBDC – SQL查询

我正试图通过ODBC连接使用Excel从大型Oracle数据仓库中提取数据。 我有一个使用Access中的编辑器的查询。 我试过使用Power Query和Microsoft SQL来使用这个查询来获取这个数据到Excel中,我得到错误。

因此:

  1. 从Excel执行的SQL是否需要使用不同的语法? 它不应该仍然是甲骨文?
  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]); 

您发布的SQL使用Access特定function。 如果直接针对Oracle运行,这不是一个有效的SQL查询。 如果你在Access中有一堆链接的表,那将允许这样做。

Excel中的ODBC数据源连接工作方式不同。 ODBC直接在数据源执行查询。 它首先进行一些validation,并支持在目的地支持的有限的SQL语言子集。 子集中包含的内容部分取决于为连接select的驱动程序。

所以你想要做的是使用一个工具,让你直接在Oracle环境中构build查询,如Quest Toad或Oracle SQL Developer。 一旦你有查询在那里工作,它应该更容易移植到Excel。

我喜欢做的一件事就是将我的查询放入数据库的视图中。 然后,我可以在创buildExcel连接时从视图中select所有内容。

同样值得一提的是“我的数据源”文件夹。 当您第一次在Excel中设置ODBC连接时,连接将默认保存在Windows中位于用户configuration文件文件夹下名为“我的数据源”的文件夹中。 例如: C:\Users\UserName\My Data Sources\Data Source Name.odc

您可以在任何文本编辑器中打开这些*.odc文件,您应该可以在这里手动编辑SQL。 尤其是查找<odc:CommandText>元素。 通过这种方式,您可以先build立一个简单的查询,然后在您喜欢的环境中改进SQL命令,并轻松地将更新的SQL移动到现有的ODBC连接。