Announcement

Collapse
No announcement yet.

SQL Abfragen verbinden

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

  • SQL Abfragen verbinden

    Hallo,

    ich würde gerne zwei Abfragen verbinden.
    Eig. sind es 4 Abfragen, aber zum Anfang reichen mir erst mal zwei.

    Folgenden Code habe ich bis jetzt, leider bekomme ich einen Fehler beim zweiten Select:

    Code:
    SELECT	WDKDSTAM.KKDNR,
    WDKDSTAM.KNAME1,
    DK.DK_Anzahl,
    ML.ML_Anzahl
    FROM	WDKDSTAM
        LEFT JOIN (
            SELECT KLKDNR, count(KLKDNR) AS DK_Anzahl
            FROM WDKALKULATION
            WHERE KLDATE between '01.11.2009' and '30.11.2009'
            AND KLPGR = 'DK'
            GROUP BY KLKDNR
        ) DK ON WDKDSTAM.KKDNR = DK.KLKDNR
        LEFT JOIN (
            SELECT KLKDNR, count(KLKDNR) AS ML_Anzahl
            FROM WDKALKULATION
            WHERE KLDATE between '01.11.2009' and '30.11.2009'
            AND KLPGR = 'ML'
            GROUP BY KLKDNR
        ) ML ON WDKDSTAM.KLDKDNR = ML.KLKDNR;
    Die einzelnen Abfragen funktionieren.
    Wo hat sich der Fehler versteckt?

    Danke
    Gruß
    tw-elektric

  • #2
    Keine Fehlermeldung, keine Angabe der Datenbank - das wär schon etwas hilfreich.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      sorry....

      Fehler:
      Dynamic SQL Error
      SQL error code = -104
      Token unknown -line 7, char 7
      SELECT

      Datenbank ist Interbase

      Comment


      • #4
        Hmm Interbase kenn ich jetzt nicht. Unterstützt deine Version den Subselects in Joinabfragen? Oder anders gefragt: Hast Du andere Abfragen dieser Art am laufen?

        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          mhhh, das kann ich dir nicht sagen.
          Ich habe aber bis jetzt noch kein solches Statement am laufen.

          Comment


          • #6
            Originally posted by tw-elektric View Post
            sorry....

            Fehler:
            Dynamic SQL Error
            SQL error code = -104
            Token unknown -line 7, char 7
            SELECT

            Datenbank ist Interbase
            Die Version von Interbase wäre noch hilfreicher,

            aber anscheinende kann die Version noch kein Inline Views...

            also aus den beiden inneren Select Views basteln und die dann Joinen,
            vielleicht klappst ja

            Comment


            • #7
              Interbase Version 6.0

              Leider bin ich nicht so der SQL Profi.
              Wie meinst du das mit dem umbasteln?
              Hast du mir evtl. einen Tipp?

              Danke
              Gruß
              tw-elektric

              Comment


              • #8
                Einfach aus den beiden SELECT Kommandos die Du im JOIN stehen einzelne Views bauen. Manche Datenbanken unterstützen Subselect (Abfrage innerhalb einer Abfrage) nicht.

                Sieht dann in etwa so aus:

                [highlight=sql]
                CREATE OR REPLACE VIEW VKLKDNR_DK AS
                SELECT KLKDNR, count(KLKDNR) AS DK_Anzahl
                FROM WDKALKULATION
                WHERE KLDATE between '01.11.2009' and '30.11.2009'
                AND KLPGR = 'DK'
                GROUP BY KLKDNR;

                CREATE OR REPLACE VIEW VKLKDNR_ML AS
                SELECT KLKDNR, count(KLKDNR) AS ML_Anzahl
                FROM WDKALKULATION
                WHERE KLDATE between '01.11.2009' and '30.11.2009'
                AND KLPGR = 'ML'
                GROUP BY KLKDNR;

                SELECT WDKDSTAM.KKDNR,
                WDKDSTAM.KNAME1,
                DK.DK_Anzahl,
                ML.ML_Anzahl
                FROM WDKDSTAM
                LEFT JOIN VKLKDNR_DK DK
                ON WDKDSTAM.KKDNR = DK.KLKDNR
                LEFT JOIN VKLKDNR_ML ML
                ON WDKDSTAM.KLDKDNR = ML.KLKDNR;
                [/highlight]

                Comment


                • #9
                  okay, habe ich verstanden. einfach eine ansicht machen...

                  aber das datum ändert sich ja immer. es sollte eine varibale abfrage sein, was das datum angeht.

                  wenn ich die beiden views erstelle, sind diese ja fix mit den werten gefüllt...

                  Comment


                  • #10
                    Dann solltest Du mal die Version Deiner Interbase Datenbank posten, damit die Spezialisten hier feststellen können, welche Features Deine Datenbank unterstützt und wie man Dein Problem am Besten löst.
                    Je nachdem wie oft diese Abfrage (und von wievielen Benutzern) benutzt kann man auch einfach den View/Ansicht jedesmal neu erzeugen. Dazu müsstest Du einfach das obige Skript jedesmal komplett ablaufen lassen.
                    Im Endeffekt ist ein View/Ansicht sowieso nichts anderes als eine Abfrage auf der Datenbank. Sprich das SQL Kommando wird jedesmal ausgeführt wenn Du auf den View zugreifst.

                    Comment


                    • #11
                      Unterstützt es den Sub-Select in der SELECT-Klausel?

                      [highlight=SQL]SELECT WDKDSTAM.KKDNR,
                      WDKDSTAM.KNAME1,
                      (SELECT count(KLKDNR) AS DK_Anzahl
                      FROM WDKALKULATION AS DK
                      WHERE WDKDSTAM.KKDNR = DK.KLKDNR
                      AND KLDATE between '01.11.2009' and '30.11.2009'
                      AND KLPGR = 'DK'
                      ) AS DK_Anzahl,
                      (SELECT count(KLKDNR) AS ML_Anzahl
                      FROM WDKALKULATION AS ML
                      WHERE KLDATE between '01.11.2009' and '30.11.2009'
                      AND KLPGR = 'ML'
                      AND ML.KLDKDNR = WDKDSTAM.KLDKDNR
                      ) AS ML_Anzahl
                      FROM WDKDSTAM
                      [/highlight]
                      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


                      • #12
                        Originally posted by O. Helper View Post
                        Unterstützt es den Sub-Select in der SELECT-Klausel?

                        [highlight=SQL]SELECT WDKDSTAM.KKDNR,
                        WDKDSTAM.KNAME1,
                        (SELECT count(KLKDNR) AS DK_Anzahl
                        FROM WDKALKULATION AS DK
                        WHERE WDKDSTAM.KKDNR = DK.KLKDNR
                        AND KLDATE between '01.11.2009' and '30.11.2009'
                        AND KLPGR = 'DK'
                        ) AS DK_Anzahl,
                        (SELECT count(KLKDNR) AS ML_Anzahl
                        FROM WDKALKULATION AS ML
                        WHERE KLDATE between '01.11.2009' and '30.11.2009'
                        AND KLPGR = 'ML'
                        AND ML.KLDKDNR = WDKDSTAM.KLDKDNR
                        ) AS ML_Anzahl
                        FROM WDKDSTAM
                        [/highlight]
                        Nein, leider auch nicht.

                        Fehler:
                        Token unkown line 3, char 29
                        AS

                        Comment


                        • #13
                          Originally posted by fanderlf View Post
                          Dann solltest Du mal die Version Deiner Interbase Datenbank posten, damit die Spezialisten hier feststellen können, welche Features Deine Datenbank unterstützt und wie man Dein Problem am Besten löst.
                          Je nachdem wie oft diese Abfrage (und von wievielen Benutzern) benutzt kann man auch einfach den View/Ansicht jedesmal neu erzeugen. Dazu müsstest Du einfach das obige Skript jedesmal komplett ablaufen lassen.
                          Im Endeffekt ist ein View/Ansicht sowieso nichts anderes als eine Abfrage auf der Datenbank. Sprich das SQL Kommando wird jedesmal ausgeführt wenn Du auf den View zugreifst.
                          Interbase SQL 6 ist die Version.
                          Habe ich oben in einem Post mal geschrieben

                          Wenn ich denen Code versuche, bekomme ich Fehler mit dem CREATE OR REPLACE

                          Comment

                          Working...
                          X