Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Fehlermeldung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von gogosch, 6 Juni 2012.

  1. gogosch

    gogosch Neuer Benutzer

    Hallo,

    ich hätte da mal eine Frage unzwar möchte ich mit sub selects arbeiten und daher diese Abfrage abändern

    Code:
    SELECT top 10 LKZ, LEFT(PLZ,2) as LR, COUNT (*) as Anzahl,
    (SELECT dbo.CLKZ.TXT from CLKZ WHERE CLKZ.LKZ=ADRS.LKZ) as Land
    FROM ADRS JOIN dbo.INTT ON ADRS.ID = INTT.ADRK
    WHERE len(PLZ)>0 and REFT= 'N'
    GROUP BY LEFT(PLZ,2), LKZ
    ORDER BY Anzahl DESC
    bis hierhin klappt alles aber wenn ich nun den Join durch einen sub select ersetzen möchte(resourcen sparen) klappt es nicht..

    Code:
    SELECT top 10 LKZ, LEFT(PLZ,2) as LR, COUNT (*) as Anzahl,
    (SELECT dbo.CLKZ.TXT from CLKZ WHERE CLKZ.LKZ=ADRS.LKZ) as Land
    FROM ADRS, [COLOR=#00ff00]--JOIN dbo.INTT ON ADRS.ID = INTT.ADRK[/COLOR]
    (SELECT dbo.INTT.ADRK FROM INTT WHERE INTT.ADRK=ADRS.ID)
    WHERE len(PLZ)>0 and REFT= 'N'
    GROUP BY LEFT(PLZ,2), LKZ
    ORDER BY Anzahl DESC
    
     
  2. ukulele

    ukulele Datenbank-Guru

    Also zunächst einmal braucht ein Subselect im FROM Teil einen Alias, in diesem Fall "tabelle".
    Code:
    SELECT    TOP 10 LKZ,
            left(PLZ,2) AS LR,
            count(*) AS Anzahl,
            (    SELECT    dbo.CLKZ.TXT
                FROM    CLKZ
                WHERE    CLKZ.LKZ = ADRS.LKZ) AS Land
    FROM    ADRS,
    --JOIN    dbo.INTT ON ADRS.ID = INTT.ADRK
            (    SELECT    dbo.INTT.ADRK
                FROM    INTT
                WHERE    INTT.ADRK = ADRS.ID ) tabelle
    WHERE    len(PLZ) > 0
    AND        REFT = 'N'
    GROUP BY left(PLZ,2),LKZ
    ORDER BY Anzahl DESC
    Und dann bin ich mir auch noch nicht so sicher ob es funktioniert. Eventuell musst du die Spalten mit Tabelle.Spalte ansprechen. Außerdem erschließt sich mir der Sinn noch nicht :)
     
  3. gogosch

    gogosch Neuer Benutzer

    Danke aber es klappt noch nicht :)

    Unzwar soll das eine einfach nur eine Abfrage sein einen sinn hat sie im prinzip nicht soll einfach nur eine übung sein.


    Code:
    SELECT top 10 LKZ, LEFT(PLZ,2) as LR, COUNT (*) as Anzahl,
    (SELECT dbo.CLKZ.TXT from CLKZ WHERE CLKZ.LKZ=ADRS.LKZ) as Land
    FROM ADRS JOIN
    (SELECT dbo.INTT.ADRK FROM INTT) as Test
    WHERE len(PLZ)>0 and REFT = 'N'
    GROUP BY LEFT(PLZ,2), LKZ
    ORDER BY Anzahl DESC
    Bei WHERE(Zeile 5) gibt er diese Fehlermeldung raus:
    Falsche Syntax in der Nähe des 'WHERE'-Schlüsselworts.

    und REFT(Zeile5) wäre angeblich ein "ungüliger Spaltenname" obwohl es richtig geschrieben ist.
     
  4. ukulele

    ukulele Datenbank-Guru

    Nach Tabelle ADRS sollte auch ein Komma stehen und dann der Subselect oder ein vernünftiger JOIN. Jetzt steht da JOIN ( SELECT...

    Gehört REFT denn zur Tabelle ADRS?
     
  5. gogosch

    gogosch Neuer Benutzer

    Nein REFT gehört nicht zu ADRS sondern zu INTT.
    Hab die Lösung bereits gefunden :)
    Code:
    SELECT top 10 LKZ, LEFT(PLZ,2) as LR, COUNT (*) as Anzahl,
    (SELECT dbo.CLKZ.TXT from CLKZ WHERE CLKZ.LKZ=ADRS.LKZ) as Land
    FROM
    (SELECT ADRS.PLZ, ADRS.LKZ, INTT.REFT FROM INTT Join ADRS ON INTT.ADRK = ADRS.ID
    WHERE len(PLZ)>0 and REFT = 'N') as ADRS
    GROUP BY LEFT(PLZ,2), LKZ
    ORDER BY Anzahl DESC
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden