0

私は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 でこれを実現する方法はありますか。

4

4 に答える 4