说我必须关注PaymentTransaction表:
ID Amount PayMethodID ---------------------------- 10254 100 1 15789 150 1 15790 200 0 16954 300 0 17864 400 1 19364 500 1
PayMethodID Desc ---------------------------- 0 CASH 1 VISA 2 MASTER 3 AMEX 4 ETC
我只需使用group by
将PayMethodID分组为1和0。
我要做的是在GROUP BY
下显示不存在的PayMethodID我目前使用简单分组语句的结果是
PayMethodID TotalAmount ------------------------- 0 500 1 1150
预期结果(如果未在事务表中退出则显示0):
PayMethodID TotalAmount ------------------------- 0 500 1 1150 2 0 3 0 4 0
这可能是一个简单且重复的问题,但我无法找到要搜索的关键字。如果你能找到我的任何重复,我会删除这篇文章。感谢。
答案 0 :(得分:1)
您可以使用LEFT JOIN
,因此将显示最左侧表( TableA )中的所有行是否在另一个表上具有匹配值。
SELECT a.PayMethodID,
TotalAmount = ISNULL(SUM(b.Amount), 0)
FROM TableA AS a -- <== contains list of card type
LEFT JOIN TableB AS b -- <== contains the payment list
ON a.PayMethodID = b.PayMethodID
GROUP BY a.PayMethodID
答案 1 :(得分:1)
常规的OUTER(LEFT)JOIN将为您提供PayMethod表中的所有行,无论它们是否存在于PaymentTransaction表中,其余的总和为NULL。然后,您可以使用COALESCE使空行为零;
SELECT pm.PayMethodID, COALESCE(SUM(pt.Amount), 0) TotalAmount
FROM PayMethod pm
LEFT JOIN PaymentTransaction pt
ON pm.PayMethodID = pt.PayMethodID
GROUP BY pm.PayMethodID