0

AmountSold の合計を AmountSold として返し、AmountCollected の合計を AmountCollected として返さなければならない複雑なストアド プロシージャがあります。以下の条件に応じて、その金額は、Sold、collected、または UpgradedCollected に追加する必要があります。「キーワードの近くの構文エラーが正しくありません」および「キーワードの場合」という構文エラーがよくわかりません。ここで何が間違っていますか?前もって感謝します!

最初の 2 つの if では、どちらかが正しいと仮定して別のコードを書きました。これは SQL 05 にあります。

Select sum(cast(RDC.AmountSold as numeric(10,2))) as AmountSold, 
sum(cast(RDC.AmountCollected as numeric(10,2))) as AmountCollected,


case when RDC.AmountUpgraded = RDC.AmountUpgradedCollected
        then sum(cast((AmountSold + RDC.AmountUpgraded)as numeric(10,2))) as AmountSold
        and sum(cast((AmountCollected + RDC.AmountUpgradedCollected)as numeric(10,2))) as AmountCollected
        else if RDC.AmountUpgraded > RDC.AmountUpgradedCollected
        then AmountSold = AmountSold + RDC.AmountUpgraded 
        and AmountCollected = AmountCollected + RDC.AmountUpgradedCollected
        else
        then AmountSold = AmountSold + RDC.AmountUpgraded 
        and AmountCollected = AmountCollected + RDC.AmountUpgraded 
        and AmountUpgradedCollected = AmountUpgradedCollected + (RDC.AmountUpgradedCollected - RDC.AmountUpgraded)
        as AmountUpgradedCollected

end
4

1 に答える 1

2

残念ながら、SQLのcaseステートメントは、使用しようとしている方法では機能しません。使用SELECT方法などのステートメントで使用する場合、各case式は一度に1つの列しか定義できません。したがって、次のようなものがあなたのために働くはずです。

Select sum(cast(RDC.AmountSold as numeric(10,2))) as AmountSold, 
sum(cast(RDC.AmountCollected as numeric(10,2))) as AmountCollected,

SUM(CASE WHEN RDC.AmountUpgraded = RDC.AmountUpgradedCollected
  THEN CAST(AmountSold + RDC.AmountUpgraded as numeric(10,2))
  ELSE CAST(AmountSold + RDC.AmountUpgraded as numeric(10,2))
END) AS AmountSold,

SUM(CASE WHEN RDC.AmountUpgraded = RDC.AmountUpgradedCollected
  THEN cast(AmountCollected + RDC.AmountUpgradedCollected as numeric(10,2))
  ELSE cast(AmountCollected + RDC.AmountUpgraded  as numeric(10,2))
END) AS AmountCollected

このように書くと、AmountSoldのcaseステートメントに少し重複したロジックがあり、おそらく単純化できることに気付くでしょう。

于 2012-07-31T17:26:19.430 に答える