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,因此上面的结果将与主查询返回的记录数相同。