Sql server 2008 计算T-SQL中的不同值
我试图在一个视图中计算不同电子邮件地址的数量,但我无法理解语法。。。以下是我所拥有的:Sql server 2008 计算T-SQL中的不同值,sql-server-2008,tsql,Sql Server 2008,Tsql,我试图在一个视图中计算不同电子邮件地址的数量,但我无法理解语法。。。以下是我所拥有的: BEGIN SELECT COUNT(*) AS UserCount FROM ( SELECT DISTINCT EmailAddress FROM viewCohortsAuthorizedByContractor WHERE (ListAccess = 1) AND (ContractorId = @id) ) END 内部select工作正常,但如果我尝试添加计数,
BEGIN
SELECT COUNT(*) AS UserCount FROM (
SELECT DISTINCT EmailAddress
FROM viewCohortsAuthorizedByContractor
WHERE (ListAccess = 1) AND (ContractorId = @id)
)
END
内部select工作正常,但如果我尝试添加计数,会出现以下错误:Msg 156,级别15,状态1,过程rptContractorUsersWithListUserCount,第23行[批处理开始行15]
关键字“END”附近的语法不正确
我确信有一个简单的解决方案,我就是想不出来…您不需要子查询。试试这个:
SELECT count(DISTINCT EmailAddress) as UserCount
FROM viewCohortsAuthorizedByContractor
WHERE (ListAccess = 1) AND (ContractorId = @id)
您忘记为子查询指定别名-
选择COUNT(*)作为UserCount FROM(…)作为Q
。关键字AS不是必需的-选择COUNT(*)作为UserCount FROM(…)Q
。在您的情况下,SQLServer认为END
是您的别名。史蒂文的早期展示更适合你的案例。我知道这很简单。考虑到末尾没有任何子句(Where,Order By),我没有想到别名。TSQL的语法要求您在任何情况下都为子查询指定别名。我说的是位于FROM-block中的子查询。工作起来很有魅力!
BEGIN
SELECT COUNT(*) AS UserCount FROM (
SELECT DISTINCT EmailAddress
FROM viewCohortsAuthorizedByContractor
WHERE (ListAccess = 1) AND (ContractorId = @id)
)A -----give a name for result set
END