Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 TSQL,选择计数中的大小写语句_Sql Server_Tsql_Select_Subquery_Aggregate Functions - Fatal编程技术网

Sql server TSQL,选择计数中的大小写语句

Sql server TSQL,选择计数中的大小写语句,sql-server,tsql,select,subquery,aggregate-functions,Sql Server,Tsql,Select,Subquery,Aggregate Functions,我找不到任何解释来解释为什么我的想法是错误的。 我想做一些类似的事情: SELECT COUNT(CASE WHEN (SELECT [Number] FROM [SOMETABLE] WHERE [id] = [GivenId]) = 3 THEN 1 ELSE 0 END) FROM [SomeOtherTable] 我一直在 无法对包含聚合或子查询的表达式执行聚合函数 如果我能理解为什么我不能做我想做的事情,那就太好了 另外,如果能知道我可以做些什么来获得相同的结果,那也很好。

我找不到任何解释来解释为什么我的想法是错误的。 我想做一些类似的事情:

SELECT 
   COUNT(CASE WHEN (SELECT [Number] FROM [SOMETABLE] WHERE [id] = [GivenId]) = 3 THEN 1 ELSE 0 END) 
FROM [SomeOtherTable]
我一直在

无法对包含聚合或子查询的表达式执行聚合函数

如果我能理解为什么我不能做我想做的事情,那就太好了

另外,如果能知道我可以做些什么来获得相同的结果,那也很好。

不能对不相关的表使用COUNT(聚合函数),即表[SOMETABLE]和[SomeOtherTable]之间必须存在某种关系

一种可行的方法是:

如果无法访问该链接,以下是架构代码:

create table yourtable (id int, graduates int, group_code varchar(100));

insert into yourtable values 
 (1, 50, 'others'),(1, 20, 'something'), (2, 20, 'total'), (3, 35, 'total2'), 
 (4, 40, 'total3');

create table othertable (ids int, graduate int, class varchar(100))
insert into othertable values (3,2, 'others')
您的修改声明:

SELECT SUM(CASE WHEN (o.ids) = 3 THEN 1 ELSE 0 END )
FROM yourtable as y inner join othertable as o on y.group_code = o.class
where o.graduate = 2

**感谢Giles,我将COUNT aggregate函数更改为SUM

我看不出这个问题有什么不好的地方。这是否应该是
选择SUM(如果(o.id)=3,则1,否则0结束)
?Count返回记录数,无论它们是1还是0,因此上面的结果将与主查询返回的记录数相同。