[FIXED] Problem mit der Verwendung einer Unterabfrage mit Linksverknüpfung

Ausgabe

Ich habe ein Problem, während ich 2 Tabellen mit einer Unterabfrage verbinde und eine Fehlermeldung erhalte:

Nachricht 156, Ebene 15, Status 1, Zeile 25

Falsche Syntax in der Nähe des Schlüsselworts „FROM“.


Msg 102, Level 15, State 1, Line 36


Falsche Syntax in der Nähe von „PM“.

Hier ist die Abfrage, die ich erreichen wollte:

SELECT 
    [SEASON],
    SUM(BL.QUANTITY) AS QUANTITY,
    PM.PRODUCT AS 'PRD_CLASS',
    PM.BRAND AS 'BRAND',
    PM.COST_PRICE AS 'COST',
    PM.DATECREATE   
FROM
    (SELECT
         QUANTITY, WAREHOUSE,
         CASE SUBSTRING(EXTENDED, 3, 1)
             WHEN '1' THEN 'SS'
             ELSE 'FW'
         END + SUBSTRING (EXTENDED, 1, 2) [SEASON]
     FROM 
         BINLABEL WITH (NOLOCK)
    ) BL

Lösung

Wie ich in den Kommentaren erwähnt habe, haben Sie 2 FROMKlauseln. Vermutlich sollte letzteres ein CROSS JOINoder sein CROSS/OUTER APPLY(wir wissen nicht welches). Sie aliasieren auch Ihre zweite abgeleitete Tabelle als PMund dann die Tabelle PRODTABLEals PM; Das ist auch nicht erlaubt, da Sie nicht 2 Objekte mit demselben Alias ​​im selben Bereich haben können. Da ich nicht erraten kann, welchen Alias ​​Sie an anderen Orten meinen, habe ich {Alias}Stellen eingefügt, an denen Sie den entsprechenden Alias ​​hinzufügen müssen.

Ich entferne auch die NOLOCKTabellenhinweise; Sie haben nicht geantwortet, warum Sie sie “brauchen”, und bei allem Respekt bezweifle ich, dass Sie verstehen, was es unter Berücksichtigung der Kommentare und Fragen tut. Wahrscheinlicher ist, dass Sie die schreckliche Angewohnheit eines anderen aufgegriffen haben (werden Sie diese schlechte Angewohnheit jetzt los).

Endlich werde ich auch die andere schlechte Angewohnheit von Aliasen mit einfachen Anführungszeichen los (siehe auch meinen Kommentar dazu) und Schemaqualifikation (vorausgesetzt dbo):

SELECT {Alias}.[SEASON],
       SUM(BL.QUANTITY) AS QUANTITY,
       {Alias}.PRODUCT AS PRD_CLASS,
       {Alias}.BRAND AS BRAND,
       {Alias}.COST_PRICE AS COST,
       {Alias}.DATECREATE
FROM (SELECT QUANTITY,
             WAREHOUSE,
             CASE SUBSTRING(EXTENDED, 3, 1)WHEN '1' THEN 'SS' ELSE 'FW' END + SUBSTRING(EXTENDED, 1, 2) AS [SEASON]
      FROM dbo.BINLABE) BL
     CROSS JOIN (SELECT PRODUCT AS PRDODUCT,
                        BRAND AS BRAND,
                        COST_PRICE AS COST,
                        DATECREATE AS DATE_CREATE
                 FROM dbo.PRODTABLE) PT
     LEFT JOIN dbo.PRODTABLE PM ON BL.SKU = PM.SKU --Think we can safely assume this is PM
WHERE {Alias}.WAREHOUSE = '0001'
GROUP BY {Alias}.[SEASON]
ORDER BY {Alias}.[SEASON];


Beantwortet von –
Larnu


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like