Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 计算T-SQL中的不同值_Sql Server 2008_Tsql - Fatal编程技术网

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