IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

condition avec un alias


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 162
    Points : 82
    Points
    82
    Par défaut condition avec un alias
    Bonjour

    je n'arrive pas à faire une condition avec un alias, est ce qu'il y a d'autre moyen pour le faire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select count(Statut_Contact) 'nbre', substring(date_derniere_modification,1,11) 'date_mod', Statut_Contact,
    dom_dom_id,dom_id from questionnaire
    inner join tmk_domaine on dom_lib=Statut_Contact
    	  where substring(date_derniere_modification,1,11) between @dd  and @df and code_fichier=@code
     group by  Statut_Contact,date_mod,dom_dom_id,dom_id
     
    --Msg 207, Level 16, State 1, Procedure total, Line 9
    --Invalid column name 'date_mod'.

    merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Tout d'abord à mon sens un nom de colonne de résultat n'étant pas une valeur, il ne doit pas être entre quotes.
    Ensuite les alias de colonnes ne sont utilisables que dans la clause ORDER BY d'une requête, parce que l'ordre de traitement d'une requête par le processeur de requêtes est le suivant :

    1. Lecture de la clause FROM
    2. Lecture des clauses JOIN et APPLY
    3. Lecture de la clause WHERE/AND
    4. Lecture de la clause GROUP BY
    5. Lecture de la clause HAVING
    5. Lecture de la clause SELECT
    6. Lecture de la clause ORDER BY

    Entre chaque étape, une table virtuelle est créée sur la base des statistiques de colonne.
    On voit que la lecture de la clause SELECT intervient presque en tout dernier, et surtout après la lecture de la clause GROUP BY
    Ceci fait que le processeur de requête ne connaît pas encore le nom des colonnes du résultat à produire lorsqu'il lit la clause GROUP BY.
    Donc il ne peut pas interpréter votre instruction.
    En revanche tout se passerait bien si vous utilisiez ces alias de colonne dans la clause ORDER BY.

    En outre je subodore que la colonne date_derniere_modification est d'un des types de données chaîne, ce qui est une très mauvaise idée, et vous a conduit à écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE		SUBSTRING(date_derniere_modification, 1, 11) BETWEEN @dd AND @df
    Sachez que l'application d'une fonction sur une colonne, qu'elle soit native ou définie par l'utilisateur, dans une clause de jointure ou de filtrage, empêche SQL Server d'estimer le nombre de lignes qui correspondent à votre prédicat (sauf si une colonne calculée existe sur la table et que sa définition est exactement la même que le prédicat, et qu'elle est indexée).
    Dans le plupart des cas avec ce type de prédicat, l'optimiseur de requête n'a donc d'autre choix que celui de lire toute la table ...

    De plus et si je ne me suis pas trompé, cela vous empêche d'utiliser toute fonction native de date, ce qui ne facilitera jamais l'écriture des requêtes, et par conséquent les performances.

    @++

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 162
    Points : 82
    Points
    82
    Par défaut
    je te remercie pour tes extraordinaire explication c'est vraiment un honneur que je participe avec vous dans ce forum

    A propos de mon sujet, j'ai séparé la date et l'heure de la colonne date_modification afin de rendre les requête plus rapide ainsi de faciliter le développement que je suis en train de manipuler
    encore grand merci

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    j'ai séparé la date et l'heure de la colonne date_modification afin de rendre les requête plus rapide ainsi de faciliter le développement
    Si vous êtes sous SQL Server 2008, vous pouvez utiliser le type date pour stocker la date, et le type time(0) pour stocker une heure.
    Si vous n'êtes pas dans cette version, stockez les dates en mettant l'heure à zéro, et l'heure en nombre de minutes ou de secondes selon la précision dont vous avez besoin.

    En plaçant les bons index, ça devrait rouster

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/02/2006, 11h13
  2. Vérification de condition avec affichage message
    Par spirou dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2006, 21h27
  3. condition avec request
    Par nicerico dans le forum ASP
    Réponses: 3
    Dernier message: 28/06/2005, 15h19
  4. Conditions avec liste de tuples
    Par Robert999 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/07/2004, 11h01
  5. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo