我正在运行的查询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有多个付款上市,但销售信息只出现一次,不重复,每次付款。
在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来完成,而不必使用服务器端代码运行条件查询此。