2013-11-24 49 views
1

我想显示所有payment_type贷方的付款。但是,我只看到一个和我的total列绝对不对。我必须搞砸我的JOINs,但我不知道如何解决它们。我已经尝试了不同的组合LEFTsRIGHTs等,并继续缩短。正确加入多个表

我应该看到TammyTerry。总数目前是正确的。

这是fiddle of my SQL

而且,我查询这里:

SELECT p.conf, 
     Concat(g.fname, ' ', g.lname) AS guest, 
     u.unit_name, 
     p.card_type, 
     p.payment_amt, 
     Sum(p.payment_amt)   AS total 
FROM payments p, 
     guests g, 
     units u, 
     reservations r 
WHERE p.reservation = r.id 
     AND r.guest = g.id 
     AND r.unit = u.id 
     AND p.payment_date = '2013-11-01' 
     AND p.payment_type = 'credit' 
+0

向我们展示你的期望的输出是什么。你说你希望Tammy和Terry都出现,但是你希望他们两人的总数是多少? – OGHaza

+0

是的,总数对于他们的“SUM”是正确的。我只是没有得到另一个“客人”来显示。 –

+0

是的,但我不明白(也不能预测)你想要的输出是什么。你想要2行显示“Tammy 603”和“Terry 603”? (+其他列) – OGHaza

回答

7

那么你可以用一个子查询做到这一点:

SELECT p.conf, 
     Concat(g.fname, ' ', g.lname) AS guest, 
     u.unit_name, 
     p.card_type, 
     p.payment_amt, 
     (SELECT SUM(payment_amt) 
     FROM payments 
     WHERE payment_date = p.payment_date 
      AND payment_type = p.payment_type) AS total 
FROM payments p 
LEFT JOIN reservations r ON p.reservation = r.id 
LEFT JOIN guests g ON r.guest = g.id 
LEFT JOIN units u ON r.unit = u.id 
WHERE p.payment_date = '2013-11-01' 
    AND p.payment_type = 'credit' 

Fiddle

或者你可以只计算总算账,和UNION它到其余的结果:

UNION ALL 
SELECT NULL, 'Total', NULL, NULL, SUM(payment_amt) 
FROM payments 
WHERE payment_date = '2013-11-01' 
    AND payment_type = 'credit' 

Fiddle

1

您需要添加GROUP BY像这样完整的SQL:

GROUP BY g.fname, g.lname 

Fiddle Demo