Announcement

Collapse
No announcement yet.

Problem mit Join Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Join Abfrage

    Hallo

    hätte da ein Problem bei einer SQL-Abfrage, die auch JOIN beinhaltet.

    Ich habe zwei Tabellen, in denen Messwerte gespeichert werden.
    In der Tabelle A werden alle 30 Sek Messwerte gespeichert
    in der Tabelle B alle 5min

    Nun möchte ich verschiedene Abfragen starten, wobei ich ja schon bei der ersten nicht weiter komme. Diese sollte so aussehen, dass bei einer Tagesabfrage die Tabelle A normal ihre 30 Sek Messwerte ausgibt und die Tabelle B solange ihre 5min Messwerte wiederholt ausgibt, bis die nächsten fünf Minuten abgefragt werden.
    Hoffe, das war einigermaßen verständlich. Habe dazu folgendes probiert. Jedoch sagt er mir, dass die Syntax bei JOIN nicht stimmt. Nur finde ich den fehler nicht

    Code:
    SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Datum, " & _
                    "B.[WR11_Pac_1000] AS P_w11, " & _
                    "B.[WR17_Pac_1000] AS P_w17 FROM" & _
                    "(SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Datum, " & _
                        "DatePart(hh, [DatumZeit]) AS Std, " & _
                        "DatePart(n,[DatumZeit]) AS Minuten, " & _
                        "AVG([Leistung Zeile1]) AS P_1, " & _
                        "AVG([Leistung Zeile2]) AS P_2, " & _
                        "AVG([Leistung Zeile3]) AS P_3, " & _
                        "AVG([Leistung Shadow]) AS P_SW, " & _
                        "AVG([Wirkgrd.Zeile1]) AS W_1, " & _
                        "AVG([Wirkgrd.Zeile2]) AS W_2, " & _
                        "AVG([Wirkgrd.Zeile3]) AS W_3, " & _
                        "AVG([Wirkgrd.Shadow]) AS W_SW " & _
                        "FROM [Photo_1].[30sec] " & _
                        "WHERE DatumZeit " & _
                            "BETWEEN CONVERT(datetime, '" & anfang & "') AND CONVERT(datetime, '" & ende & "') " & _
                        "GROUP BY Convert(datetime,convert(char(10),DatumZeit,104)), DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit]))" & _
                        " AS A, " & _
                    "INNER JOIN ([Photo_2].[5min]) AS B" & _
                    "ON A.DatumZeit = B.DatumZeit ORDER BY Convert(datetime,convert(char(10),DatumZeit,104)), DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit])", con
    Wäre super, wenn ihr mir da weiterhelfen könntet!!!

  • #2
    Code:
    SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Datum, " & _
                    "B.[WR11_Pac_1000] AS P_w11, " & _
                    "B.[WR17_Pac_1000] AS P_w17 FROM" & _
                    "(SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Datum, " & _
                        "DatePart(hh, [DatumZeit]) AS Std, " & _
                        "DatePart(n,[DatumZeit]) AS Minuten, " & _
                        "AVG([Leistung Zeile1]) AS P_1, " & _
                        "AVG([Leistung Zeile2]) AS P_2, " & _
                        "AVG([Leistung Zeile3]) AS P_3, " & _
                        "AVG([Leistung Shadow]) AS P_SW, " & _
                        "AVG([Wirkgrd.Zeile1]) AS W_1, " & _
                        "AVG([Wirkgrd.Zeile2]) AS W_2, " & _
                        "AVG([Wirkgrd.Zeile3]) AS W_3, " & _
                        "AVG([Wirkgrd.Shadow]) AS W_SW " & _
                        "FROM [Photo_1].[30sec] " & _
                        "WHERE DatumZeit " & _
                            "BETWEEN CONVERT(datetime, '" & anfang & "') AND CONVERT(datetime, '" & ende & "') " & _
                        "GROUP BY Convert(datetime,convert(char(10),DatumZeit,104)), DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit]))" & _
                        " AS A " & _
                    "INNER JOIN [Photo_2].[5min] AS B" & _
                    "ON A.DatumZeit = B.DatumZeit ORDER BY Convert(datetime,convert(char(10),DatumZeit,104)), DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit])", con
    Den Beistrich hinter dem "AS A" und die Klammern um "[Photo_2].[5min]" weg, dann könnte das so funktionieren.

    Sprechende Namen für Alias wären auch sinnvoll.

    eMeFGe chapster

    Comment


    • #3
      Hallo camas,

      kleiner Tipp: Das oben ist ja aus einem VB(.NET) Source Code.
      Debug es, lass Dir das fertige SQL Statement ausgeben, kopiere es in eine Abfrage-Fenster vom SSMS und führe es dort aus; da bekommst Du eher Hinweise, was falsch ist.

      ...] AS B" & _
      Da fehlt am Ende ein Leerzeichen; so wir mit der Folgezeile
      .... AS BON A.Datum ...

      draus.
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        wow - das geht ja richtig schnell

        hab nun auch das komma entfernt und leerzeichen eingefügt. jetzt bleibt er mir aber schon in der nächsten Zeile stehen

        Code:
        ON A.DatumZeit = B.DatumZeit
        diesmal wird mir gesagt, dass DatumZeit ein ungültiger Spaltenname sei. Dieser Name kommt doch aber in beiden Tabellen vor und wird in anderen Abfragen ebenfalls verwendet

        Originally posted by O. Helper View Post

        kleiner Tipp: Das oben ist ja aus einem VB(.NET) Source Code.
        Debug es, lass Dir das fertige SQL Statement ausgeben, kopiere es in eine Abfrage-Fenster vom SSMS und führe es dort aus; da bekommst Du eher Hinweise, was falsch ist.
        ich bin im vba-editor unterwegs. zu meiner schande muss ich sagen, dass ich mich da mit dem debuggen nicht wirklich auskenne.... aber werde morgen mal den befehl im studiomanager ausprobieren

        Comment


        • #5
          Debuggen in VBA geht wie in alle MS IDEs; einfach links an der gewünschten Code-Stelle auf die horizontale grau Leiste klicken, dann kommt dort ein roter Punkt = Breakpoint.

          Dieser Name kommt doch aber in beiden Tabellen
          Nope, kommt nicht in beiden Tabellen vor.
          Gewöhne Dir im eigenen Interesse an, nicht nur VB Code, sondern auch SQL Statements vernünftig zu formatieren. Was man nicht lesen kann, das kann man auch nicht verstehen und dann fällt es schwer, Fehler zu finden.
          [highlight=SQL]SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Datum,
          B.[WR11_Pac_1000] AS P_w11,
          B.[WR17_Pac_1000] AS P_w17
          FROM
          (SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Datum,
          DatePart(hh, [DatumZeit]) AS Std,
          DatePart(n,[DatumZeit]) AS Minuten,
          AVG([Leistung Zeile1]) AS P_1,
          AVG([Leistung Zeile2]) AS P_2,
          AVG([Leistung Zeile3]) AS P_3,
          AVG([Leistung Shadow]) AS P_SW,
          AVG([Wirkgrd.Zeile1]) AS W_1,
          AVG([Wirkgrd.Zeile2]) AS W_2,
          AVG([Wirkgrd.Zeile3]) AS W_3,
          AVG([Wirkgrd.Shadow]) AS W_SW
          FROM [Photo_1].[30sec]
          WHERE DatumZeit BETWEEN CONVERT(datetime, ' & anfang & ') -- VBA Rest
          AND CONVERT(datetime, ' & ende & ') -- VBA Rest
          GROUP BY Convert(datetime,convert(char(10),DatumZeit,104)),
          DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit])
          ) AS A
          INNER JOIN [Photo_2].[5min] AS B
          ON A.DatumZeit = B.DatumZeit
          ORDER BY Convert(datetime,convert(char(10),DatumZeit,104)),
          DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit]), con[/highlight]
          Im Insideview A gibt es die Felder "Datum", "Std", usw, aber eben kein DatumZeit.
          Olaf Helper

          <Blog> <Xing>
          * cogito ergo sum * errare humanum est * quote erat demonstrandum *
          Wenn ich denke, ist das ein Fehler und das beweise ich täglich

          Comment


          • #6
            Originally posted by O. Helper View Post
            Debuggen in VBA geht wie in alle MS IDEs; einfach links an der gewünschten Code-Stelle auf die horizontale grau Leiste klicken, dann kommt dort ein roter Punkt = Breakpoint.
            joa, so mach ich das, wenn ich nicht die ganze prozudur durchlaufen will. Aber wie kann ich mir "zwischenergebnisse" anzeigen lassen???? Das wäre z.B. jetzt seeehr interessant für mich.

            Habe nun meinen Code folgendermaßen geändert

            Code:
            rs.Open "SELECT " & _
                                "B.[WR11_Pac_1000] AS P_w11, " & _
                                "B.[WR17_Pac_1000] AS P_w17 " & _
                        "FROM" & _
                                "(SELECT [DatumZeit] As Dat, " & _
                                        "DatePart(hh, [DatumZeit]) AS Std, " & _
                                        "DatePart(n,[DatumZeit])/5 AS Minuten, " & _
                                        "AVG([Leistung Zeile1]) AS P_1, " & _
                                        "AVG([Leistung Zeile2]) AS P_2, " & _
                                        "AVG([Leistung Zeile3]) AS P_3, " & _
                                        "AVG([Leistung Shadow]) AS P_SW, " & _
                                        "AVG([Wirkgrd.Zeile1]) AS W_1, " & _
                                        "AVG([Wirkgrd.Zeile2]) AS W_2, " & _ 
                                        "AVG([Wirkgrd.Zeile3]) AS W_3, " & _  
                                        "AVG([Wirkgrd.Shadow]) AS W_SW " & _
                                "FROM [Photo_1].[30sec_Werte] " & _
                                "WHERE DatumZeit BETWEEN CONVERT(datetime, '" & anfang & ')" & _
                                                "AND CONVERT(datetime, '" & ende & "') " & _
                                "GROUP BY [DatumZeit], DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit])/5)" & _
                                " AS A INNER JOIN [Photo_2].[5min_Werte] AS B " & _
                                        "ON A.Dat = B.DatumZeit " & _
                        "ORDER BY [DatumZeit], DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit])/5", con
            Wenn ich das jetzt laufen lasse, bekomm ich keine Fehlermeldung mehr. ABER scheinbar ist der Recordset rs auch leer. Denn in der Tabelle bekomm ich kein Ergebnis.
            Es kann nicht sein, dass in der SQL-Tabelle keine Einträge vorhanden sind. Denn wenn ich ohne Inner Join abfrage, krieg ich ja auch ergebnisse für den gleichen Tag

            Sorry, wenn ich so blöde fragen hier stelle. Das ist einfach das erste mal, dass ich mit join arbeite und scheint doch schwerer zu sein, als gedacht...

            Comment

            Working...
            X