2017-10-20 56 views
-2

Je possède ce sous-requête:Pourquoi ne puis-je pas accéder à un champ défini comme "Select 1" à partir d'une sous-requête dans la requête externe?

LEFT JOIN (SELECT 1 as exist 
        , MAX (ev.EventDate) as eventdate 
        , evt.EventCode 
        , CCaseID 
      FROM stg.Event ev 
      JOIN stg.EventTemplate evt 
      ON ev.EventTemplateID = evt.ID 
      WHERE evt.EventCode = 'UN002' 
      Group by CCaseID, evt.EventCode) as un002 
    ON un002.CCaseID = ev.CCaseID 
WHERE evt.EventCode = 'UN001' 
    AND (un002.eventdate < ev.eventdate OR un002.eventdate IS NULL) 
Group by ev.CCaseID, evt.EventCode) as un001 
    ON cc.ID = un001.CCaseID 

Je suis en train d'accéder maintenant le champ exist dans la requête externe comme par un001.exist mais SQL Server me dit qu'il est un champ non valide. Qu'est-ce que je rate?

+1

Si la colonne est appelée 1, juste essayer de bracketing le numéro [1] avec des crochets comme indiqué. – russ

+2

Demandez-vous pourquoi vous ne pouvez pas accéder à la colonne "exister" dans votre requête principale? –

+3

Bien .... un001.exist n'est pas une colonne valide. Vous avez nommé cette sous-requête comme un002. Ce serait plus facile pour vous de voir s'il y avait un meilleur formatage. –

Répondre

1

un001 n'a pas exist ce champ appartient à un002 sous-requête.

De plus, vous avez un GROUP BY et le et ON donc il y a du code manquant là.

Vous devez simplifier le code et utiliser CTE pour le rendre facile à lire et à déboguer.

Quelque chose comme ceci:

WITH un001 as (SELECT ...), 
un002 as (SELECT ...) 
SELECT * 
FROM un001 
JOIN un002 
    ON un001 .CCaseID = un002.CCaseID 
+1

Ils n'ont pas le pluriel d'exister dans le code affiché. –

+0

@SeanLange Vous avez raison, la question me manque complètement. –