按别名分组

You*_*usi 8 sql sql-server

我有以下T-SQL查询:

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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

消息207,级别16,状态1,行15
无效的列名称"DiffDate".

这个查询背后的想法是我希望在多少天内解决(关闭)案例数量.

例:

1 = 3例

2 = 50例

3 = 20例

我该怎么做到这一点?

Joh*_*Woo 18

您需要在GROUP BY子句中使用整个表达式,或者只是将整个语句包装在子查询中并对外部语句进行分组.

您不能ALIASGROUP BY语句的同一级别上创建的子句使用的原因SELECT是因为它是在创建它的子句GROUP BY之前执行的.SELECTALIAS

这是SQL的操作顺序:

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句
  • ORDER BY子句

试试这个查询,

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
Run Code Online (Sandbox Code Playgroud)