Abfrageproblem mit mehreren Ergebnissen
kaest
- datenbank
Hallo,
ich habe folgendes Problem mit einer SQL-Abfrage.
Die Tabelle hat in Spalte A den einen festen Eventtext und in Spalte B einen Timestamp zu diesem Event.
Die Abfrage soll gezielt Eventtext 1 und Eventtext 2 aus Spalte A mit dem jeweiligen zugehörigen Timestamp liefern.
Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)
Danke und Gruß, Kaes
Hi kaest!
Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)
SELECT t.A,t.B
FROM table t
WHERE t.A = "Eventtext 1"
OR t.A = "Eventtext 2"
Ich glaube das war zu einfach... =)
Wie lautet dein Problem wirklich und wo kommst du nicht weiter?
MfG H☼psel
NE mein Problem is doch ein wenig umfrangreicher :/
SELECT DISTINCT auf.aufnr lieferung,
aufgrp.aufgrpnam hls,
aufgrp.aufgrpbez hls_bezeichnung,
DECODE (aufgrp.aufgrpbrsart,
10, 'VRS',
20, 'EXP',
30, 'VNB',
40, 'TOR_DIREKT') Bereitstellungsart,
TO_DATE (auf.dzins, 'DD.MM.YY') datum_lieferungsanlage,
TO_DATE (aufgrp.dzins, 'DD.MM.YY') datum_hlsanlage,
TO_DATE (evt.evtdz, 'DD.MM.YY') hls_bearbeitet,
TO_DATE (aufgrp.aufgrpdzwafrei, 'DD.MM.YY') hls_borderoquit
FROM auf_t auf, tour_t tour, aufgrp_t aufgrp, evt_t evt
WHERE auf.tournam IN (SELECT tournam
FROM tour_t
WHERE aufgrpnam IN (SELECT aufgrpnam
FROM aufgrp_t
WHERE gpnamsped = '64071')
AND aufgrpnam = '5103370')
AND evt.evtobjid = aufgrp.aufgrpnam
AND tour.aufgrpnam = aufgrp.aufgrpnam
AND auf.tournam = tour.tournam
/** AND evt.evttxt = 'HLS-Statusänderung von Freigegeben/Disponiert nach Gestartet'**/
AND evt.evttxt = 'HLS-Statusänderung von Gestartet nach Bearbeitet' as datum1
/** AND evt.evttxt = 'HLS-Statusänderung von Bearbeitet nach Bereitgestellt' as datum2 **/
AND auf.dzins > TO_DATE ('01.01.09 00:00', 'DD.MM.YY HH24:MI')
AND auf.dzins < TO_DATE ('30.04.09 23:59', 'DD.MM.YY HH24:MI')
Das ist meine komplette Abfrage.
Aus der Tabelle evt_t benötige ich 2 unterschiedliche timestamps (Spalte evtdz). Diese kann ich allerdings nur über die Spalte evttxt selektieren, da in dieser Spalte die eindeutigen Kriterien hinterlegt sind.
Ich möchte jetzt für jedes Ergebnis (aufnr) in einer Spalte den timestamp A und den Timestamp B haben. Und nicht eine Zeile für aufnr mit dem Timestamp A und eine neue Zeile mit dem timestamp B
Is das so verständlich ?
Schöne Grüße, Kaest
Hi kaest!
»» Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)
SELECT t.A,t.B
FROM table t
WHERE t.A = "Eventtext 1"
OR t.A = "Eventtext 2"
>
> Ich glaube das war zu einfach... =)
> Wie lautet dein Problem wirklich und wo kommst du nicht weiter?
>
> MfG H☼psel
moin,
wenn man deine erste, einfache fragestellung ließt und dann die zugehörige abfrage dazu sieht, dann bekommt man ja glatt einen schreck, lach. aber wie auch immer, deine frage ist schon ein paar tage her und falls du noch interesse an einer lösung hast (korrelierte unterabfragen), dann sag bescheid.
Ilja
hallo,
war ein paar tage beruflich unterwegs, daher kommt jetzt erst eine antwort.
ich bin natürlich immer noch gerne an einer antwort interessiert.
schöne grüße, kaest
moin,
wenn man deine erste, einfache fragestellung ließt und dann die zugehörige abfrage dazu sieht, dann bekommt man ja glatt einen schreck, lach. aber wie auch immer, deine frage ist schon ein paar tage her und falls du noch interesse an einer lösung hast (korrelierte unterabfragen), dann sag bescheid.
Ilja
moin,
ich bin natürlich immer noch gerne an einer antwort interessiert.
er einmal ein paar grundsätzlich hinweise. du benutzt die implizite JOIN schreibweise, die ist sachlich gesehen nicht falsch, aber es ließt sich ungemein schwieriger und verleitet auch leichter zu fehler. es empfiehlt sich immer, die explizite schreibweise von joins zu benutzen, also:
SELECT spalte1, sspalte2...
FROM tabelle1 t1
INNER JOIN tabelle2 t2 ON t2.joinspalte = t1.joinspalte
WHERE ....
;
ein weiterer hinweis ist der, dass du in der unterabfrage noch mal die tabelle "tour_t" angibst mit ebenfalls einer zugehörigen unterabfrage. diese doppelt verschattelte unterabfrage scheint mir auf den ersten blick überflüssig zu sein, zumal du auch den aliasnamen vergessen hast. es empfiehlt sich immer aliasnamen zu benutzen, erst recht, wenn die gleiche tabelle mehrfach in einer abfrage vorkommt.
der dritte hinweis ist der, dass joins "böse" sein können. das liegt an der art der beziehung der tabellen untereinander haben können, nämlich 1:N. damit können sich die datensätze in der ergebnismenge vervielfachen und das scheint mir auch bei dir zu passieren, das schlüsselwort DISTINCT ist immer ein guter hinweis darauf. besser ist es oftmals, in der FROM klausel die tabellen einzubeziehen, die auch immer die richtige anzahl an daetnsätze in der ergebnismenge wiedergibt. braucht man dann noch zusätzliche informationen aus anderen tabellen in der ausgaben, ist es meiner efahrung nach ratsamer korrelierte unterabfragen zum einsatz kommen zu lassen, weil damit die ergebnismenge gleich bleibt.
aber um das alles genauer sagen zu können, ist es wichtig, dass du mal aus fachlicher sicht erklärst, wofür die tabellen genau sind und wie sie in beziehung miteinander stehen. am besten auch immer mit beispieldaten. je ausführlicher du das erklärst, um so schneller können wir dir helfen. wichtig ist dabei, es ist eine fachliche sichtweise, also keine sql.
ps: deine tabellennamen finde ich nicht sehr selbsterklärend, könnte man verbessern, wenn die möglichkeit dazu besteht.
Ilja
Hello,
ich habe folgendes Problem mit einer SQL-Abfrage.
Die Tabelle hat in Spalte A den einen festen Eventtext und in Spalte B einen Timestamp zu diesem Event.
Die Abfrage soll gezielt Eventtext 1 und Eventtext 2 aus Spalte A mit dem jeweiligen zugehörigen Timestamp liefern.
Leider habe ich keine Ahnung wie ich das abfragen muss. Würd mich freuen wenn mir jemand helfen könnte. :-)
SELECT eventtext, zeit
FROM tabelle
WHERE zeit = zeitstempel1
OR zeit = Zeitstempel2;
Meisnt Du das?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg