none
Join mit Unterabfrage bringt keinen Wert RRS feed

  • Frage

  • Hallo,

    ich speichere in der Tabelle 'Tln_Status', die Stati zu einer VNr zu verschiedenen Zeiten. Nun brauche ich in einer Abfrage den Status und weitere Angaben zu einem Stichtag sowie zugehörige Werte aus anderen Tabellen. Meine Abfrage sieht so aus:

    Declare @Ende Datetime
    Set @Ende='31.8.2013'
    Select id_tlnmz,datum,AktDat From Tln_masz
    Join (Select Top 1 status,datum,AktDat,VNr From Tln_Status Where datum <= @Ende Order By AktDat DESC) t1 On VNr=id_tlnmz
    Where t1.status<>10 AND Maszn=7911

    Das Problem: Die Abfrage liefert nur die Zeilen, wo zu einer VNr mehr als 1 Wert vorhanden ist. In den Zeilen, wo zu VNr nur ein Wert vorhanden ist erscheinen nicht in der Abfrage.


    Mittelung vom Forum

    Dienstag, 13. August 2013 08:07

Alle Antworten

  • Hallo,

    ohne Testdaten lässt sich nur raten:

    Du verwendest in der WHERE Klausel t1.status<>10, was jedoch nicht in der Unterabfrage auftaucht, und so kann dabei "nichts" herauskommen. Ändere doch mal auf:

     (Select Top 1 status,datum,AktDat,VNr From Tln_Status Where status <> 10 AND datum <= @Ende Order By AktDat DESC)

    Gruß Elmar

    Dienstag, 13. August 2013 10:20
    Beantworter
  • Hallo Elmar,

    das würde das Ergebnis verfälschen. Im Endergebnis sollen alle die erscheinen, deren Status <>10 ist. Würde ich das in die Unterabfrage einbringen würde ich den Status davor erhalten wenn er am Datum=10 ist.

    Uwe


    Mittelung vom Forum

    Dienstag, 13. August 2013 11:20
  • Hallo Uwe,

    wie gesagt, ohne Testdaten und gewünschtes Ergebnis kann man da nicht viel zu sagen.

    Nur eben: Wenn die ausgewählte Zeile des JOINs den Status 10 hat, so wirst Du am Ende gar nichts zu sehen bekommen.

    Gruß Elmar

    Dienstag, 13. August 2013 12:07
    Beantworter
  • Hallo Elmar,

    ich habe nun noch etwas experimentiert. Das Problem scheint zu sein, dass in dem Join nicht, wie gewünscht, das Top 1 für jedes VNr=id_tlnmz gebildet wird.

    (Select Top 1 status,datum,AktDat,VNr From Tln_Status Where datum <= @Ende Order By AktDat DESC) t1 On VNr=id_tlnmz

    Ich habe das mit Testdaten probiert und erhalte anscheinend das Ergebnis über alle VNr. Wenn ich in das Select VNr=id_tlnmz mit hinzunehme kennt er das id_tlnmz nicht.

    Uwe


    Mittelung vom Forum

    Dienstag, 13. August 2013 14:35
  • Hallo Uwe,

    wenn wir uns an den Experimenten beteiligen sollen, so solltest Du belastbare Testdaten bereitstellen.

    Gruß Elmar

    Mittwoch, 14. August 2013 07:12
    Beantworter