Umstellung von Oracle zu MSSQL Problem bei ein paar ODBC abfragen

Also früher konnte man mit dem SQL Profiler genau tracen, welche Querys auf der DB ausgeführt werden. Den gibt es aber seit ein paar SQL Versionen nicht mehr, ich hab das lange nicht gemacht. Vermutlich gibt es etwas ähnliches.

Dein Problem ist, das du zwar dein Query kennst, aber nicht, das was Excel daraus macht. Und Excel baut irgendwo was falsch zusammen (vermutlich eine Klammer). Wenn du das genaue Query kennst welches abgefeuert wird, kannst du es fixen. Ansonsten musst du deine Subselects ersetzen, ich hatte das ja schon am Anfang angerissen.
 
Werbung:
Wenn's wirklich mit dem Datum zusammenhängt:
Versuch beim Datum die Schreibweise JJJJMMTT in einfachen Hochkommata, ohne irgendwelche Striche oder Punkte.
Das sollte der SQL immer richtig interpretieren.
 
Ja allerdings bin ich skeptisch was Excel angeht. Kannst du vielleicht bei einem Fall, wo das Ergebnis nicht passt, mal die Rohdaten der Tabellen in vereinfachter Form als Beispiel posten? Natürlich möglichst wenig aber so, das man weiß was da ist und was raus kommen soll.

PS: Alternativ bleibt dir immer auch der Weg über eine View. Lege in MSSQL eine View an und frage diese mit Excel ab. Das verschiebt viel Logik in die DB.
 
so hier mal die Unterschiede von zwei Kunden einmal mit SUB-Select und einmal ohne SUB-Select. Mit Subselect findet er mehr daten. Vielleicht kannst mit den Daten dann mehr herausfinden und das Select ohne SUBs auf der Ersten Seite optimieren
 

Anhänge

Das ist aus mehreren Gründen denkbar schwierig.

Zunächst mal sind das sehr viele Daten, Spalten, die für die Sache an sich nicht mal relevant sein dürften. Vor allem aber sind das nur zwei Resultsets, nicht die Ausgangsdaten. Sicher, da kann ich jetzt nach Unterschieden forschen aber am Ende müsste ich die Ursprungstabellen daraus ableiten. Die Spaltenbeschriftungen enthalten auch nicht den Tabellen-Alias, das muss ich erst mit deinen Selects abgleichen. Dein erstes Select beginnt mit der Spalte atko.nr_atko, deine Excel beginnt mit "Fläche"... Sry das ist mir zu viel Arbeit.

Eventuell reicht es für Excel, das ganze leicht umzustellen. Diese Abfrage:
Code:
SELECT *
FROM atko
INNER JOIN atpo ON  atko.nr_atko = atpo.nr_atko
INNER JOIN atpokl ON atko.nr_atko = atpokl.nr_atko AND atpo.nr_atpo = atpokl.nr_atpo
INNER JOIN ar ON atpokl.nr_ar = ar.nr_ar
INNER JOIN kd ON atko.nr_kd = kd.nr_kd
sollte zunächst mal nur Informationen liefern, die du benötigst, und wo nichts gezählt (aggregiert) wird. Das kannst du erweitern um
Code:
SELECT atko.*,bspo2.anzahl AS Fremd
FROM atko
INNER JOIN atpo ON  atko.nr_atko = atpo.nr_atko
INNER JOIN atpokl ON atko.nr_atko = atpokl.nr_atko AND atpo.nr_atpo = atpokl.nr_atpo
INNER JOIN ar ON atpokl.nr_ar = ar.nr_ar
INNER JOIN kd ON atko.nr_kd = kd.nr_kd
LEFT JOIN (
SELECT bspo.nr_atko,bspo.atponr_bspo,spo.nr_atpokl,count(*) AS anzahl
FROM bspo
WHERE bspo.bez_quell_bspo = 1
GROUP BY bspo.nr_atko,bspo.atponr_bspo,spo.nr_atpokl ) bspo2
ON atpokl.nr_atko = bspo2.nr_atko AND atpokl.nr_atpo = bspo2.atponr_bspo AND atpokl.nr_atpokl = bspo2.nr_atpokl
Das testest du. Wenn das Ergebnis wie gewünscht ist am besten einmal den Code in Excel mit der Einschränkung durch Parameter testen.

Sollte das funktionieren kannst du die restlichen "Zählungen" ebenfalls als Select angeben und dazu joinen. Beispiel:
Code:
SELECT atko.*,bspo2.Fremd,atolz2.Sandstrahlen,atolz2.Heatsoak,atolz2.Handgesäumt
FROM atko
INNER JOIN atpo ON  atko.nr_atko = atpo.nr_atko
INNER JOIN atpokl ON atko.nr_atko = atpokl.nr_atko AND atpo.nr_atpo = atpokl.nr_atpo
INNER JOIN ar ON atpokl.nr_ar = ar.nr_ar
INNER JOIN kd ON atko.nr_kd = kd.nr_kd
LEFT JOIN (
SELECT bspo.nr_atko,bspo.atponr_bspo,spo.nr_atpokl,count(*) AS Fremd
FROM bspo
WHERE bspo.bez_quell_bspo = 1
GROUP BY bspo.nr_atko,bspo.atponr_bspo,spo.nr_atpokl ) bspo2
ON atpokl.nr_atko = bspo2.nr_atko AND atpokl.nr_atpo = bspo2.atponr_bspo AND atpokl.nr_atpokl = bspo2.nr_atpokl
LEFT JOIN (
SELECT atpozl.nr_atko,atpozl.nr_atpo,
sum( CASE WHEN
atpozl.zlklnr_atpozl = '39' and
atpozl.nr_beaart = 310 and
atpozl.nr_beatyp = 600
THEN 1 ELSE 0 END ) as "Sandstrahlen",
sum( CASE WHEN
atpozl.zlklnr_atpozl = '08' and
atpozl.nr_beaart = 910 and
atpozl.nr_beatyp = 102
THEN 1 ELSE 0 END ) as "Heatsoak",
sum( CASE WHEN
atpozl.zlklnr_atpozl = '01' and
atpozl.nr_beaart = 210 and
atpozl.nr_beatyp = 100
THEN 1 ELSE 0 END ) as "Handgesäumt"
FROM atpozl
GROUP BY atpozl.nr_atko,atpozl.nr_atpo ) atpozl2
ON atpo.nr_atko = atpozl2.nr_atko AND atpo.nr_atpo = atpozl2.nr_atpo
Du solltest deinen Code Stück für Stück erweitern und darauf achten, ab wann eventuell das Ergebnis vom Ziel abweicht.
 
Also früher konnte man mit dem SQL Profiler genau tracen, welche Querys auf der DB ausgeführt werden. Den gibt es aber seit ein paar SQL Versionen nicht mehr, ich hab das lange nicht gemacht. Vermutlich gibt es etwas ähnliches.

Dein Problem ist, das du zwar dein Query kennst, aber nicht, das was Excel daraus macht. Und Excel baut irgendwo was falsch zusammen (vermutlich eine Klammer). Wenn du das genaue Query kennst welches abgefeuert wird, kannst du es fixen. Ansonsten musst du deine Subselects ersetzen, ich hatte das ja schon am Anfang angerissen.
Deine Abfrage funktioniert ja. Aber wir wissen doch immer noch nicht wie die Abfrage aus Excel herraus tatsächlich aussieht. Das ist die wichtige Information, die wir hier brauchen. Es geht net um Subselects oder sonst was. Deine Abfrage kommt fehlerhaft am SQL Server an.
wie kann ich die abfrage sichtbar machen die aus dem excel heraus kommt?
SQL Profiler sollte demnach noch gehen - ansonsten wird hier auf Alternativen verwiesen. Ganz so einfach finde ich das nicht und am Ende kann man Excel sowieso nicht fixen, höchstens austricksen.
 
SQL Profiler sollte demnach noch gehen - ansonsten wird hier auf Alternativen verwiesen. Ganz so einfach finde ich das nicht und am Ende kann man Excel sowieso nicht fixen, höchstens austricksen.
Werden wir sehen. Bei SQL Server ist soviel deprecated. Aber wenn MS das alles tatsächlich ausschalten würde, würde sehr viele Applikationen gar nicht mehr laufen. Aber egal. Der Profiler ist jedenfalls auch im SQL Server 2022 vorhanden.
 
Excel scheint das schon zu blocken, und schickt es gar nicht raus, wenn ich auf aktualisieren klicke bekomme ich sofort die Meldung aber der Profiler registriert nichts
 
Werbung:
Zurück
Oben