我在SQL Server 2008中運行查詢..我有一個sales
表和一個payments
表..有時銷售有多種付款方式(部分禮品卡+零件現金或零件信用+部分現金等)。所以我想要做的是在表格中列出每筆銷售的銷售額和付款。SQL查詢一對多關係連接無重複
如果我做了我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列出了多個付款,但銷售信息僅供出現一次,不重複,每次付款的輸出。
的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來實現,而不必使用服務器端代碼來運行條件查詢。
所有銷售額在支付表中至少有一個記錄,對嗎? – Vasanth
@VasanthSundaralingam是的每個銷售至少應該有一個相應的付款記錄 –