0

是否可以在 mssql. 像这样的东西。

  select 
  sum(case when distinct(Ocid) and Code = 200 then 1 
  else 0 end) as something
  from mytable

如果我不想修改 from 子句,是否可以通过其他方式进行修改?

4

2 回答 2

0

我很确定你想做什么是行不通的。

Ocid这将检查整个表中是否只有一个。

select 
  sum(case when Code = 200 then 1 
      else 0 end) as something
from mytable
having count(distinct Ocid) = 1

Ocid这将计算具有Code200的distinct :

select sum(something)
from
(
  select 
    count(*) as count,
    (case when max(Code) = 200 then 1 
     else 0 end) as something
  from mytable
  group by ocid
) a
where count = 1

SQLFiddle

编辑:我不太确定你想做什么。

于 2013-02-20T20:16:28.190 回答
0

这是我迄今为止最好的,但这不是你想要的。您可以使用 CTE 或子查询或其他任何方式轻松完成,但我不确定您是否可以按照您的要求进行操作。

Select  Sum(bah)
From   (Select  1 As bah
        From    mytable mt2
        Where   mt2.Code = 200
        Group   By mt2.Ocid
        Having  Count(mt2.Ocid) = 1) n

我对你的回答是,“不”,如果不做额外的修改,就不可能做你想做的事情。您将永远陷入此错误的死胡同:

Msg 130, Level 15, State 1, Line 5
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
于 2013-02-20T20:47:43.093 回答