在case语句Mssql中区别

时间:2013-02-20 20:08:07

标签: sql sql-server tsql distinct

是否有可能在mssql中的一个案例中有区别。像这样的东西。

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

如果我不想修改from子句是否可能以某种方式?

2 个答案:

答案 0 :(得分:0)

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

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

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

这将计算Ocid为200的<{1}}:

Code

SQLFiddle

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

答案 1 :(得分: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.