0

SQL Server 2005 で 1 つのケース式を使用して複数の列を取得するために SQL で wok できる Case のようなものがあるかどうか疑問に思っています。私は SQL の新人です。簡単すぎないことを願っています。前もって感謝します!!

Select RD.RepDailyInfoID, RD.TypeofDayID
Case WHEN RD.TypeofDayID = 1
THEN 
    isnull(cast(S.AmountSold as numeric(10,2)), 0) as AmountSold,
    isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) as AmountCollected,
    S.S_PaymentMethod as PaymentMethod

When RD.TypeofDayID = 9
THEN
    isnull(cast(U.AmountUpgraded as numeric(10,2)), 0) as AmountUpgraded,
    isnull(cast(U.U_UpgradedCollected as numeric(10,2)), 0) + isnull(cast(U.RenewalCollected as numeric(10,2)), 0) as AmountCollected,
    U.U_PaymentMethod as PaymentMethod
END
from RepDailyInfo RD
left outer join SellingInfo S on S.RepDailyInfoID = RD.RepDailyInfoID
left outer join UpgradingInfo U on U.RepDailyInfoID = RD.RepDailyInfoID
where RepID = @RepID
4

3 に答える 3

3

case ステートメントの THEN 部分に複数のフィールドを含めることはできません。同じロジックを使用して、複数の case ステートメントを作成できます。

Case WHEN RD.TypeofDayID = 1 THEN isnull(cast(S.AmountSold as numeric(10,2)), 0) END as AmountSold,
Case WHEN RD.TypeofDayID = 1 THEN isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) END as AmountCollected

や。。など。

于 2012-09-17T19:33:31.907 に答える
1

これはテストされていませんが、開始する必要があります。フィールドごとにケースが必要です。

    select  RD.RepDailyInfoID, RD.TypeofDayID
    , AmountSold = case when RD.TypeofDayID = 1 THEN  isnull(cast(S.AmountSold as numeric(10,2)), 0) else 0 end
    , AmountUpgraded = case when RD.TypeofDatID = 9 THEN isnull(cast(U.AmountUpgraded as numeric(10,2)), 0) else 0 end
    , AmountCollected = case when RD.TypeofDayID = 1 then isnull(cast(S.S_AmountCollected as numeric(10,2)), 0) else
                when RD.TypeofDayID = 9 then isnull(cast(U.U_UpgradedCollected as numeric(10,2)), 0) + isnull(cast(U.RenewalCollected as numeric(10,2)), 0) end
    , PaymentMethod = case when RD.TypeofDayID = 1 then S.S_PaymentMethod else
                when RD.TypeofDayID = 9 then U.U_PaymentMethod end
from RepDailyInfo RD
left outer join SellingInfo S on S.RepDailyInfoID = RD.RepDailyInfoID
left outer join UpgradingInfo U on U.RepDailyInfoID = RD.RepDailyInfoID
where RepID = @RepID
于 2012-09-17T19:35:52.070 に答える
1

ケースは実際に存在します。ここに文書化されています。

ただし、フォーマットが少しずれている可能性があると思います。試す:

SELECT RD.RepDailyInfoID, AmountSold = 
  CASE RD.TypeofDayID
    WHEN '1' THEN isnull(cast(S.AmountSold as numeric(10,2)), 0)
  END
FROM RepDailyInfo RD
left outer join SellingInfo S on S.RepDailyInfoID = RD.RepDailyInfoID
left outer join UpgradingInfo U on U.RepDailyInfoID = RD.RepDailyInfoID
WHERE RepID = @RepID

私はそれをテストしていませんが、それはドキュメントをざっと見てからの書式設定に対する私の見解です。

幸運を!

編集: ランス忍者が私に言ったように見えます. 彼のコードはより完全ですが、私が考えていたことを (部分的に) 確認しています。

于 2012-09-17T19:58:24.393 に答える