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これにより、テーブル全体に1 つしかないかどうかがチェックされます。

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

Ocidこれは、Codeが 200の個別の をカウントします。

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

SQLフィドル

編集:あなたが何をしたいのかよくわかりません。

于 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 に答える