|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : octobre 2007 Messages : 160 ![]() |
Bonjour
je n'arrive pas à faire une condition avec un alias, est ce qu'il y a d'autre moyen pour le faire? Code :
merci pour votre aide |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
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 :
WHERE SUBSTRING(date_derniere_modification, 1, 11) BETWEEN @dd AND @df 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. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : octobre 2007 Messages : 160 ![]() |
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
|
|
|
00
|
|
|
#4 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Citation:
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 @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com