2

我正在尝试获取尚未全额支付总费用的客人名单(仍有余额的客人)。

我想这样显示:

1231231(预订 ID)- John Doe(客人姓名)2013-11-17(到期日期)153.14(余额到期)

当然没有()。

我已经修补过,但仍然找不到令人满意的查询。

这是SQLFiddle的链接。

如果我没有提供足够的信息,请告诉我。

4

1 回答 1

3

你在寻找这样的东西吗?

SELECT r.id, 
       CONCAT(g.fname, ' ', g.lname) guest_name, 
       r.arrival date_due,
       r.total_price - COALESCE(p.payment_amt, 0) balance_due
  FROM reservations r JOIN guests g
    ON r.guest = g.id LEFT JOIN
(
  SELECT reservation, SUM(payment_amt) payment_amt
    FROM payments
   GROUP BY reservation
) p
    ON r.id = p.reservation
HAVING balance_due > 0

样本输出(基于提供的样本数据):

| 身份证 | GUEST_NAME | DATE_DUE | 余额_到期 |
|---------|------------|-------------- --------|-------------|
| 1000023 | 约翰·多伊 | 2013 年 11 月 9 日 00:00:00+0000 | 40.5 |
| 1000022 | 约翰·多伊 | 2013 年 11 月 9 日 00:00:00+0000 | 40.5 |
| 1000018 | 约翰·多伊 | 2013 年 11 月 1 日 00:00:00+0000 | 54 |
| 1000019 | 约翰·多伊 | 2013 年 11 月 8 日 00:00:00+0000 | 54 |
| 1000020 | 玛丽珍 | 2013 年 11 月 8 日 00:00:00+0000 | 54 |
| 1000021 | 玛丽珍 | 2013 年 11 月 8 日 00:00:00+0000 | 54 |

这是SQLFiddle演示

于 2013-11-10T05:41:58.453 回答