SQL Server,重复子查询和别名

时间:2016-03-04 06:05:46

标签: sql sql-server

我有一个简单的查询,如下所示:

Select SUBSTRING(Email, Charindex('@', Email) + 1,
    Len(Email) - CharIndex('@', Email)) as EmailDomain,
    Count(Email) as Total
from tblPerson
Group by SUBSTRING(Email, Charindex('@', Email) + 1,
Len(Email) - CharIndex('@', Email))

除了存在子查询副本外,其他工作正常:

SUBSTRING(Email, Charindex('@', Email) + 1,
Len(Email) - CharIndex('@', Email))

我为子查询添加了as EmailDomain的别名,但是当我这样查询时:

Select SUBSTRING(Email, Charindex('@', Email) + 1,
    Len(Email) - CharIndex('@', Email)) as EmailDomain,
    Count(Email) as Total
from tblPerson
Group by EmailDomain

我收到了一个错误:

  

无效的列名称'EmailDomain'

如何修复此问题但同时又不使用重复查询?

3 个答案:

答案 0 :(得分:1)

答案很简单,您不能在WHERE子句或GROUP BY子句中使用列别名。

您可以尝试这样:

SELECT EmailDomain,
       Total 
FROM (
        Select SUBSTRING(Email, Charindex('@', Email) + 1,
        Len(Email) - CharIndex('@', Email)) as EmailDomain,
        Count(Email) as Total
        from tblPerson
        ) a
Group by EmailDomain

答案 1 :(得分:1)

您无法在GROUP BY中使用别名。要解决此问题,您可以使用子查询:

SELECT
    t.EmailDomain,
    COUNT(t.Email) AS Total
FROM (
    SELECT
        SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email) - CHARINDEX('@', Email)) AS EmailDomain,
        Email
    FROM tblPerson
) t
GROUP BY t.EmailDomain

答案 2 :(得分:0)

尝试下面的脚本:

Select EmailDomain from (Select SUBSTRING(Email, Charindex('@', Email) + 1,
    Len(Email) - CharIndex('@', Email)) as EmailDomain,
    Count(Email) as Total
from tblPerson) tperson
Group by EmailDomain