0
votes

Puis-je faire référence à une valeur IIF dans une clause où

J'écris un rapport sur Excel qui interrogeant des données d'une table ODBC.

Je souhaitais créer une nouvelle colonne pour obtenir des critères de recherche et l'utiliser dans ma clause Why où. Par exemple: P>

SELECT 
SO_Site,
SO_Customer,
IIF((SO_PERFORM_DATE)<GetDate(),'Backlog','Normal') AS 'ISBACKLOG'

FROM WAREHOUSE.FAKESALESORDES

WHERE SO_Site=1234 AND ISBACKLOG='Backlog'


2 commentaires

IIF est une chose excessif (et accès) -pecific afaik. Dans la plupart des dialectes SQL, vous utiliseriez probablement une déclaration de cas à la place. Cela pourrait dépendre de quel type de base de données vous vous connectez.


La réponse courte est - vous ne pouvez pas. Logiquement, la clause WHERE est appliquée avant le calcul de IsBackLog de sorte que la colonne n'existe pas. Cependant, vous savez exactement quelles lignes qualifiées pour isbackup = 'Backlog' de sorte que l'approche facile consiste à déplacer cette logique dans la clause WH où où ... et so_perform_date . Et s'il vous plaît utilisez des espaces et le formatage des espaces pour rendre votre code plus lisible. Vous et quelqu'un d'autre que vous travaillez, vous apprécierez cet effort.


3 Réponses :


0
votes

Ce dont vous avez besoin est une déclaration , par exemple: xxx

Vous pouvez en savoir plus sur ici .


3 commentaires

Merci. Je reçois: [Microsoft] [pilote ODBC SQL Server] [SQL Server] Nom de colonne invalide 'isbacklog'. Cela pourrait-il être dû uniquement à avoir lu l'accès au serveur ODBC?


Colonne IsBackLog n'existe pas dans le lieu où l'endroit où est exécuté avant le champ Select


@Bestter merci, j'ai oublié ça!



1
votes

Il y a bien sûr des façons autour de cela. Mais vous devez apprendre à marcher avant d'essayer de courir. Cela ne gratte pas la surface du complexe ou du désordre! Mais vous pouvez utiliser un CTE dans de nombreux cas pour réduire la complexité visuelle ou la duplication. Exemple: xxx

démo comme Fiddle . Vous pouvez également envisager d'utiliser une vue ou un calculée colonne


0 commentaires

0
votes

Vous ne pouvez pas faire référence à un alias nommé dans son propre où code> comme ça.

Vous devez simplement mettre l'ensemble iif code> dans le dans le où instruction de la même manière que dans le Sélectionnez CODE> P>

SELECT 
    SO_Site,
    SO_Customer,
    IIF((SO_PERFORM_DATE)<GetDate(),'Backlog','Normal') AS 'ISBACKLOG'

FROM 
    WAREHOUSE.FAKESALESORDES

WHERE 
    SO_Site=1234 
    AND SO_PERFORM_DATE<GetDate()


0 commentaires