【问题标题】:TSQL, SELECT statement in CASE in COUNTTSQL,在 COUNT 中的 CASE 中的 SELECT 语句
【发布时间】:2014-02-08 13:01:33
【问题描述】:

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

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

我一直在努力

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

很高兴能理解为什么我不能做我想做的事。

而且很高兴知道我可以做些什么不同的事情以获得相同的结果。

【问题讨论】:

  • 我看不出这个问题有什么不好。

标签: sql-server tsql select subquery aggregate-functions


【解决方案1】:

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

完成这项工作的一种可能方法是:SQL code here

如果您无法访问链接,这里是架构代码:

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 聚合函数更改为 SUM

【讨论】:

  • 不应该是SELECT SUM(CASE WHEN (o.ids) = 3 THEN 1 ELSE 0 END ) 吗? Count 返回记录数,无论它们是 1 还是 0,因此上面的结果将与主查询返回的记录数相同。
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2013-08-15
  • 2023-04-07
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多