2017-06-22 3 views
1

Ich versuche, Excel Pull-Daten aus einem großen Oracle Data Warehouse über eine ODBC-Verbindung zu verwenden. Ich habe eine Abfrage, die mit dem Editor in Access funktioniert. Ich habe versucht, Power Query und Microsoft SQL zu verwenden, um diese Abfrage zu verwenden, um diese Daten in Excel zu erhalten, und ich bekomme Fehler.Excel OBDC - SQL-Abfrage

Deshalb:

  1. SQL von Excel ausgeführt Muss in einer anderen Syntax sein? Sollte es nicht immer noch Oracle sein?
  2. Wie kann ich diese vordefinierte Abfrage verwenden, um das Data Warehouse zu pingen und zu bekommen, was ich brauche?

Hier ist die SQL, die ich bisher habe. Ich musste einige Tabellennamen ändern ... tut mir leid, wenn es das komisch macht.

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

Ich denke, Sie suchen nach der Einstellung "Pass-Through-Abfrage". Nicht sicher, wo es sich in Ihrer Einrichtung befindet. – Sam

+0

Die Pass-Through-Abfrageoption (in Access) wurde nicht ausgewählt. Muss die ursprüngliche Abfrage als PTQ geschrieben und dann nach Excel kopiert werden? Ziel ist es, Zugriff vollständig zu vermeiden und nur Excel verwenden, um abzufragen, was wir aus dem Data Warehouse benötigen. Ich weiß, dass VBA-Code verwendet werden kann, um eine SQL-Abfrage auszuführen, aber ich bin ziemlich arm an VBA, also möchte ich vermeiden (zumindest für jetzt) ​​ – bm0r3son

+0

Das hängt davon ab, welchen Treiber Sie verwenden. Teilen Sie Ihre Fragen - ich denke, das wird anderen helfen, Ihnen zu helfen – Sam

Antwort

1

Die von Ihnen gepostete SQL verwendet access-spezifische Funktionen. Das ist keine gültige SQL-Abfrage, wenn sie direkt gegen Oracle ausgeführt wird. Wenn Sie in Access mehrere verknüpfte Tabellen haben, würde dies dies ermöglichen.

Die ODBC-Datenquellenverbindung in Excel funktioniert anders. ODBC führt die Abfrage direkt in der Datenquelle aus. Es führt zunächst eine Validierung durch und unterstützt eine begrenzte Teilmenge der am Ziel unterstützten SQL-Sprache. Was in der Teilmenge enthalten ist, wird teilweise durch den für die Verbindung ausgewählten Treiber bestimmt.

Sie möchten also ein Tool verwenden, mit dem Sie die Abfrage direkt in einer Oracle-Umgebung wie Quest Toad oder Oracle SQL Developer erstellen können. Sobald die Abfrage dort funktioniert, sollte es einfacher sein, sie nach Excel zu portieren.

Eine Sache, die ich tun möchte, ist meine Abfrage in eine Sicht auf die Datenbank. Dann kann ich beim Erstellen der Excel-Verbindung einfach alles aus der Ansicht auswählen.

Es lohnt sich auch, Sie auf den Ordner Meine Datenquellen zu verweisen. Wenn Sie zum ersten Mal eine ODBC-Verbindung in Excel einrichten, wird die Verbindung standardmäßig in Windows in einem Ordner namens "Meine Datenquellen" gespeichert, der sich direkt unter Ihrem Benutzerprofilordner befindet. Zum Beispiel: C:\Users\UserName\My Data Sources\Data Source Name.odc.

Sie können diese *.odc Dateien in einem beliebigen Texteditor öffnen, und Sie sollten in der Lage sein, die SQL hier manuell zu bearbeiten. Achten Sie besonders auf das Element <odc:CommandText>. Auf diese Weise können Sie im Voraus eine einfache Abfrage erstellen und dann den SQL-Befehl in Ihrer bevorzugten Umgebung verbessern und das aktualisierte SQL einfach in die vorhandene ODBC-Verbindung verschieben.

+0

Danke Joel Coehoorn für deine Antwort. Es hat definitiv das Problem gelöst. – bm0r3son