現在、これらのSQLステートメントを使用しています。私のテーブルには、「Cash」または「Check」を含むフィールドCPaymentTypeがあります。以下に示すように2つのSQLステートメントを実行することにより、支払い額を合計できます。この場合、ユーザーは2つのsqlステートメントまたは1つだけを実行する場合でも速度の違いに気づきませんが、私は自分のやり方が好きではありません。1つのSQLステートメントが必要です。これらをCASE条件で1つのステートメントに再構成するにはどうすればよいですか?オンラインの例では1または0またはブール値のいずれかになるため、私は理解できません。過去の小切手による支払いが含まれないようにします。どうもありがとうございました。
Select SUM(CAmount) as PaymentAmount
from TableOrderPayment
where CPaymentType='Cash' and CStatus='Active';
Select SUM(CAmount) as PaymentAmount
from TableOrderPayment
where CPaymentType='Check' and CDate<=SYSDATETIME() and CStatus='Active';
Select SUM(CASE When CPayment='Cash' Then CAmount Else 0 End ) as CashPaymentAmount,
SUM(CASE When CPayment='Check' Then CAmount Else 0 End ) as CheckPaymentAmount
from TableOrderPayment
Where ( CPayment='Cash' Or CPayment='Check' ) AND CDate<=SYSDATETIME() and CStatus='Active';
select CPaymentType, sum(CAmount)
from TableOrderPayment
where (CPaymentType = 'Cash' and CStatus = 'Active')
or (CPaymentType = 'Check' and CDate <= bsysdatetime() abd CStatus = 'Active')
group by CPaymentType
乾杯-
個別の列で各合計を取得するには:
Select SUM(IF(CPaymentType='Check', CAmount, 0)) as PaymentAmountCheck,
SUM(IF(CPaymentType='Cash', CAmount, 0)) as PaymentAmountCash
from TableOrderPayment
where CPaymentType IN ('Check','Cash')
and CDate<=SYSDATETIME()
and CStatus='Active';
「または」を使用する
Select SUM(CAmount) as PaymentAmount
from TableOrderPayment
where (CPaymentType='Check' Or CPaymentType='Cash')
and CDate <= case CPaymentType When 'Check' Then SYSDATETIME() else CDate End
and CStatus='" & "Active" & "'"
または「IN」
Select SUM(CAmount) as PaymentAmount
from TableOrderPayment
where CPaymentType IN ('Check', 'Cash')
and CDate <= case CPaymentType When 'Check' Then SYSDATETIME() else CDate End
and CStatus='" & "Active" & "'"
私はあなたが判決書を必要とは思わない。 where句を更新し、句をグループ化するための正しい括弧があることを確認するだけです。
SELECT Sum(CAMount) as PaymentAmount
from TableOrderPayment
where (CStatus = 'Active' AND CPaymentType = 'Cash')
OR (CStatus = 'Active' and CPaymentType = 'Check' and CDate<=SYSDATETIME())
私の前に投稿された回答は、CDate <= SYSDATETIME()も現金支払いタイプに適していると仮定しています。私は小切手を支払うためにその条項だけを探すので、私は私のものを分割すると思います。