Zum Inhalt springen

SQL Inner Join


shadoan

Empfohlene Beiträge

Guten Morgen die Herren,

vielleicht könnte mir mal wieder jemand bei einem SQL-Problem helfen.

Ich habe folgende SQL-Anweisung:

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, max( dsl_data.emailnummer ) AS mailnummer,

dsl_treatment.action , dsl_errorcodes.description

FROM dsl_data

INNER JOIN dsl_treatment ON ( dsl_data.auftragsnummer = dsl_treatment.auftragsnummer )

INNER JOIN dsl_errorcodes ON ( dsl_data.errorcode = dsl_errorcodes.code )

GROUP BY dsl_data-auftragsnummer

ORDER BY dsl_treatment.date DESC

Ziel soll es sein, die Auftragsnummer, Nachname, Vorname usw und auch eine Aktionsnummer, und zwar die des letzten Eintrages in der Tabelle dsl_treatment zu der übergebenen Auftragsnummer zu ermitteln.

Was er nun aber tut, ist mir die erste Aktionsnummer für die jeweilige Auftragsnummer zu übermitteln, die er findet.

Ich denke, mal dass da wohl irgendwie die Abfrage nicht stimmt, aber was ist da falsch bitte?

Vielen Dank.

Link zu diesem Kommentar
Auf anderen Seiten teilen

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, Max(dsl_data.emailnummer) AS [mailnummer], dsl_treatment.action

FROM (dsl_data INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.code) INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer

GROUP BY dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.action, dsl_treatment.date

ORDER BY dsl_treatment.date DESC;

ist zwar nicht schoen, aber geht :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, ich habe drei Tabellen miteinander verknüpft. In der DSL-Data stehen Datensätze, wie z.B. eine eMail-Nummer und ein Fehlercode. Ich möchte nun aus der DSL-Data den höchsten eMail-Nummer Eintrag haben und den Fehlercode. Das geht ja soweit, das mit den Fehlercodes klappt. Nun gibt es auch ein Aktionsfeld in der Tabelle dsl_treatment, die auch die Auftragsnummer enthält. Hieraus möchte ich den aktuellsten, also von der Zeit her den letzten Datensatz, damit ich die letzte Aktion mit diesem Auftrag anzeigen kann.

Also auftragsnummer, höchtste eMailnummer aus dsl_data, fehlercode aus dsl_errorcodes und letzte Eintragung aus dsl_treatment unter dieser auftragsnummer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

also werden die auftragsnummern in der data mehrmals verwendet und durch die emailnummer kriegst du die reihenfolge raus?das problem ist aber das in der treatment nur die auftragsnummer steht und man keine verknüpfung zur emailnummer hat, ist das gewollt ? :)

so ich mach erstmal mittag, wir kriegen das aber noch hin :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ist das korrekt wie du es sagst und so ist es auch gewollt oder muss so sein, weil so angeliefert wird *grr* leider. Auftragsnummer ist in der Tabelle dsl_data mehrmals mit mehreren eMailnummern also 1,2,3 bspw. und auftragsnummer ist auch in der tabelle dsl_treatment mehrmals mit den aktionen zum Auftrag also nummer und aktion 1 oder 2 oder 3 bspw. mit einem zusätzlichen Timestamp. Nehmen wir nun folgendes an.

Wir haben die auftragsnummer 127112, an die wurden die emails 2 und 3 verschickt. und die hat die aktionen 1, 2, 3, und 4, wovon die Aktion 2 die jüngste ist, weil grade getätigt.

Mein ergebnis soll nun sein:

Auftragsnummer 127112 + eMail-Nr 3 + Aktionsnummer 2

Hoffe nun ist es verständlich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

aber es gibt doch zwischen der treatment und der data nur ne verknüpfung über die auftragsnummer, woher soll er dann wissen welche email welcher aktion zugeordnet ist? wenn man die abfrage so macht, dann gibt er einfach alles raus, weil ja die mailnummer zu jeder aktion gehoeren kann

Link zu diesem Kommentar
Auf anderen Seiten teilen

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, Max(dsl_data.emailnummer) AS [mailnummer], dsl_treatment.action, Max(dsl_treatment.date) AS [sortdate]

FROM (dsl_data INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.code) INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer

GROUP BY dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.action

ORDER BY Max(dsl_treatment.date) DESC;

und so ? :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

kein problem, bin eh gerad an der arbeit und hab ab und zu nix zu tun :)

also ich nur ne loesung ueber die max funktion beim order by, was hast fuern sql server, oder ist das access?

ich probier mal weiter wenn ich zu hause bin,so gegen 17uhr

Link zu diesem Kommentar
Auf anderen Seiten teilen

manchmal sieht man echt die einfachsten sachen nicht :cool:

wie waers mit:

SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.emailnummer, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.aktion, dsl_treatment.datum

FROM (dsl_data INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer) INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.errorcode

ORDER BY dsl_data.emailnummer DESC , dsl_treatment.datum DESC;

also so stimmt das schonmal mit der sortierung, jetzt fehlt noch das mit der letzten aktionsnummer, na mal schaun :)

ps.: noch wegen spam oder so, ich haette das gern noch in den vorherigen post reingeschrieben, aber irgendwie konnte ich den nicht mehr aendern, najo :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

SELECT dsl_data.auftragsnummer, First(dsl_data.nachname) AS ErsterWertvonnachname, First(dsl_data.vorname) AS ErsterWertvonvorname, First(dsl_data.emailnummer) AS ErsterWertvonemailnummer, First(dsl_data.errorcode) AS ErsterWertvonerrorcode, First(dsl_errorcodes.description) AS ErsterWertvondescription, Last(dsl_treatment.aktion) AS LetzterWertvonaktion, Last(dsl_treatment.datum) AS LetzterWertvondatum

FROM (dsl_data INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer) INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.errorcode

GROUP BY dsl_data.auftragsnummer

HAVING (((dsl_data.auftragsnummer)="gewuenschte auftragsnummer hier einfuegen :)"))

ORDER BY Last(dsl_treatment.datum) DESC , Max(dsl_data.emailnummer) DESC;

jetzt aber wirklich, musst es halt noch ein bisschen huebscher machen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...