2

SQL Server 2008 R2 で作業しています。私は合計を取得しようとしています。

これは私のクエリです

select  
  SUM(
    case 
      when sec.SecurityTypeID =  2 then SUM(quantity)*(sec.AnnualIncomeRate/100) 
      when sec.SecurityTypeID = 5 then 0 
      when sec.SecurityTypeID = 11 then SUM(quantity)*sec.AnnualIncomeRate    
      else SUM(quantity)*sec.AnnualIncomeRate   
    end
  ) AS ProjectedIncome 
from Transactions as t

実行すると、次のエラーが表示されます。

メッセージ 130、レベル 15、状態 1、行 3
集計またはサブクエリを含む式に対して集計関数を実行できません。

case句でsum関数を使用していることは知っています。しかし、このケースステートメントで合計を見つける必要があります。

4

2 に答える 2

5

それはそう; ;がcaseないため、これは行ごとです。単一の行を参照する場合、ほとんど意味がありません。それがセット全体にわたる場合は、最初にそれを変数に計算する必要があります。それ以外の場合は、その inner-を適用する予定のグループ/パーティションについて考える必要があります。groupSUM(quantity)SUMSUM

同様の例を挙げると:

これは機能します:

select 1 as [a], 2 as [b], 3 as [c]

そしてこれはうまくいきます:

select case [a] when 1 then [b] else [c] end from (
  select 1 as [a], 2 as [b], 3 as [c]
) x

しかし、これはしません:

select case [a] when 1 then sum([b]) else [c] end from (
  select 1 as [a], 2 as [b], 3 as [c]
) x

同様に、これは機能します:

select sum(case [a] when 1 then [b] else [c] end) from (
  select 1 as [a], 2 as [b], 3 as [c]
) x

しかし、これはそうではなく、報告したのと同じエラーメッセージが表示されます:

select sum(case [a] when 1 then sum([b]) else [c] end) from (
  select 1 as [a], 2 as [b], 3 as [c]
) x
于 2013-07-12T10:06:46.393 に答える