sql >> データベース >  >> RDS >> Mysql

MySQL SelectおよびIF()ステートメント

    両方のテーブルを結合し、請求書ごとに集計して、sum()を使用できます。 合計支払い額を計算します。最後に、case 式を使用してステータスを表示できます:

    select i.invoiceid, i.clientname, i.invoicetotal, 
        coalesce(sum(p.PaymentReceivedAmount), 0) as paymenttotal,
        case when i.invoicetotal <=> sum(p.PaymentReceivedAmount) then 'In Full' else 'Partial Payment' end as paymentstatus
    from invoices i
    left join payment p 
        on  p.invoiceid = i.invoiceid
        and p.paymentreceiveddate >= '2019-01-01' and p.paymentreceiveddate < '2020-01-01'
    where 
        i.invoicedate >= '2019-01-01' and i.invoicedate < '2020-01-01'
        and i.invoicestatus in (1, 2)
        and (i.invoiceactive <> 0 or i.invoiceactive is null)
    group by i.invoiceid
    order by clientname
    

    注:

    • left join 期間中の支払いなしで請求書を許可します。

    • 元のクエリと同じ日付フィルターを使用しましたが、半分開いた間隔に変更することで少し最適化しました。

    • テーブルinvoicestatusは必要ないようです 希望する結果を達成するために。




    1. 多くの通知を伴う.NETSqlDependencyと高速ポーリング?

    2. エラー:ORA-65096:Oracleの共通ユーザーまたはロール名が無効です

    3. mysql2のインストール中にエラーが発生しました:gemネイティブ拡張のビルドに失敗しました

    4. CREATE TABLE ASを使用して他のテーブルからデータを選択し、新しいテーブルを作成します