我有一个简单的查询,如下所示:
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'
如何修复此问题但同时又不使用重复查询?
答案 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