1. ホーム
  2. sql

[解決済み] 条件付きSQL和

2023-04-08 05:12:59

質問

私は現在、各トランザクションID(一意である)の合計現金を取得するために、次の行を追加する大規模なSQLステートメントを持っています。

select sum(cash) from Table a where a.branch = p.branch 
and a.transID = p.transID) TotalCash

で、同じことをする必要があるのですが、先月中に評価された現金の値だけを合計する必要があるので、次のようなものになります。

select sum(CASE ValueDate WHEN > @startMonthDate THEN cash ELSE NULL END) 
from Table a where a.branch = p.branch and a.transID = p.transID) TotalMonthCash

私は全体の文を持っていないことを申し訳ありませんが、それは本当に長く、ストアドプロシージャのコンテキストに固有のものですが、誰かが私が何を意味するのか知っているだろうと思っていたのですか?

どのように解決するのですか?

代わりにこれを試してみてください。

SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)

説明

CASE 式の構文が正しくありません。単純な CASE 式の構文と検索された CASE 式の構文を混同しているようです。以下を参照してください。 のドキュメントを参照してください。 :

CASE式には2つの形式があります。

  • 単純なCASE式は、式を単純な式の集合と比較し、結果を決定します。
  • 検索されたCASE式は、結果を決定するためにブール式の集合を評価する。

検索されたCASE式の構文が欲しい。

CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END


余談ですが、パフォーマンスが問題であれば、従属サブクエリを使用する代わりに、JOINとGROUP BYを使用して書き直すと、この式がより速く実行されることが分かるかもしれません。