我在 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 来实现这一点,而不必使用服务器端代码来运行条件查询。