10
votes

Groupe par nom d'alias

J'ai la requête T-SQL suivante:

select 
    count(CaseId),
    (SELECT DATEDIFF(day,CreateDate,LastActivityDate)) AS DiffDate
from 
    VW_Case_Analysis
where 
    CaseStatus = 'C' 
    and LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000'
Group By 
    DiffDate


1 commentaires

Cela aiderait si vous nous donniez la structure de la table.


5 Réponses :


22
votes

Vous devez utiliser l'ensemble de l'expression dans le groupe par code> clause ou simplement envelopper la déclaration entière dans une sous-requête et le regroupement sur la déclaration extérieure.

La raison pour laquelle vous ne pouvez pas Utiliser alias code> sur la clause code> par code> créé au même niveau de l'instruction code> de sélection code> est parce que le groupe par code > est exécuté avant la clause code> code> dans laquelle le alias code> est créé. p>

Il s'agit de l'ordre de fonctionnement SQL: p>

  • de la clause li>
  • où la clause li>
  • groupe par clause li>
  • avoir la clause li>
  • Sélection de la clause LI>
  • ordre par clause li> ul>

    Essayez cette requête, P>

    SELECT  COUNT(CaseId),
            DiffDate
    FROM
            (
                select  CaseId,
                        DATEDIFF(day,CreateDate,LastActivityDate) AS DiffDate
                from    VW_Case_Analysis
                where   CaseStatus = 'C' and 
                        LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000'
            ) sub
    Group By DiffDate
    


0 commentaires

3
votes

Vous ne pouvez pas utiliser d'alias dans la clause du groupe par la clause.

Utilisez une table dérivée ou dans votre cas, supprimez la 2e SELECT. P>

select 
    count(CaseId),
    DATEDIFF(day,CreateDate,LastActivityDate) AS DiffDate
from 
    VW_Case_Analysis
where 
    CaseStatus = 'C' 
    and LastActivityDate between '2013-4-1 00:00:00.000' and '2013-4-30 23:59:59.000'
Group By 
    DATEDIFF(day,CreateDate,LastActivityDate)


0 commentaires

0
votes

Cela ne vous ferait pas les mêmes résultats? XXX

Je suis novice à SQL alors peut-être que je ne le saisis pas correctement. J'ai vu le commentaire ci-dessus le mien avec la syntaxe exacte mais je ne savais pas si c'était juste ...


2 commentaires

Bonjour Dan, le SQL que vous fournissez semble être le même que @ Ahmed's. Donc, si c'est une question, il ne devrait pas être affiché comme réponse, s'il est pensé comme une réponse, il n'est pas nécessaire de répondre à une réponse en double. Peut-être que vous pourriez le supprimer?


Salut, désolé pour ça. Je ne suis pas capable de supprimer mon commentaire original pour une raison quelconque.



0
votes

Ceci est un exemple facile de discussion de mise en œuvre xxx


0 commentaires

0
votes

Vous pouvez utiliser croix Appliquer pour créer un alias et l'utiliser dans le groupe par clause, comme: xxx


0 commentaires