我在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是的每个销售至少应该有一个相应的付款记录 –