私はSQL Server 2008でクエリを実行しています..私はsales
テーブルとテーブルを持っていpayments
ます..販売には複数の支払い方法がある場合があります(一部のギフトカード+一部の現金または一部のクレジット+一部の現金など..)売上と各売上の支払いをテーブルにリストします。
一致LEFT JOIN ON sales.SaleID = payments.SaleID
する支払い行が複数ある場合、販売行が重複します..
だから私がやっていることは、すべての売上と、 と一致する支払い行の数を取得すること(SELECT COUNT(*) FROM payments WHERE payments.SaleID = sales.SaleID) AS NumOfPayments
です。次に、PHP スクリプトで支払いの数を確認し、そうであれば> 1
別のクエリを実行して支払いの詳細を取得します。
私が取得しようとしている出力は、次のようになります
-----------------------------------------------------
| SaleID | SaleDate | Amount | Payments |
-----------------------------------------------------
| 123 | 2013-07-23 | $ 19.99 | Cash: $ 19.99 |
| 124 | 2013-07-23 | $ 7.53 | Cash: $ 7.53 |
| 125 | 2013-07-23 | $174.30 | Credit: $124.30 |
| | | | GiftCard: $ 50.00 |
| 126 | 2013-07-23 | $ 79.99 | Cash: $ 79.99 |
| 127 | 2013-07-23 | $100.00 | Credit: $ 90.00 |
| | | | Cash: $ 10.00 |
-----------------------------------------------------
セール 125 と 127 には複数の支払いがリストされていますが、セール情報は 1 回しか表示されず、支払いごとに複製されません。
sales
およびテーブルは次のpayments
ようになります。
Sales Payments
--------------------------------- --------------------------------------------
| SaleID | SaleDate | Amount | | PaymentID | SaleID | PmtMethod | PmtAmt |
--------------------------------- --------------------------------------------
| 123 | 2013-07-23 | $ 19.99 | | 158 | 123 | 4 | $ 19.99 |
| 124 | 2013-07-23 | $ 7.53 | | 159 | 124 | 4 | $ 7.53 |
| 125 | 2013-07-23 | $174.30 | | 160 | 125 | 2 | $124.30 |
| 126 | 2013-07-23 | $ 79.99 | | 161 | 125 | 3 | $ 50.00 |
| 127 | 2013-07-23 | $100.00 | | 162 | 126 | 4 | $ 79.99 |
--------------------------------- | 163 | 127 | 2 | $ 90.00 |
| 164 | 127 | 4 | $ 10.00 |
--------------------------------------------
SQLだけでできればもっと速い気がします。サーバー側のコードを使用して条件付きクエリを実行する代わりに、純粋な SQL でこれを実現する方法はありますか。