,如果你不关心该查询应显示行的所有成员,那么你可以删除喜欢
SELECT p.member_id,
Sum(points_earned),
Sum(points_redeemed),
Sum(CASE
WHEN points_earned IS NULL THEN 0
ELSE points_earned
END) - Sum(CASE
WHEN points_redeemed IS NULL THEN 0
ELSE points_redeemed
END) AS diff
FROM Tbl_member_participation p
LEFT OUTER JOIN tbl_member_redemption r
ON p.member_id = r.member_id
GROUP BY p.member_id
加入的成员表,否则使用:
SELECT m.member_id,
Sum(points_earned),
Sum(points_redeemed),
Sum(CASE
WHEN points_earned IS NULL THEN 0
ELSE points_earned
END) - Sum(CASE
WHEN points_redeemed IS NULL THEN 0
ELSE points_redeemed
END) AS diff
FROM Tbl_member m
LEFT OUTER JOIN Tbl_member_participation p
ON m.member_id = p.member_id
LEFT OUTER JOIN tbl_member_redemption r
ON m.member_id = r.member_id
GROUP BY m.member_id ;
,如果你想找到的差异月明智然后
SELECT m.member_id,datepart(mm,p.earndate),datepart(yyyy,p.earndate),
Sum(points_earned),
Sum(points_redeemed),
Sum(CASE
WHEN points_earned IS NULL THEN 0
ELSE points_earned
END) - Sum(CASE
WHEN points_redeemed IS NULL THEN 0
ELSE points_redeemed
END) AS diff
FROM Tbl_member m
LEFT OUTER JOIN Tbl_member_participation p
ON m.member_id = p.member_id
LEFT OUTER JOIN tbl_member_redemption r
ON m.member_id = r.member_id and p.earndate = r.redeemdate
GROUP BY m.member_id,datepart(mm,p.earndate),datepart(yyyy,p.earndate)
here是SQL小提琴演示
纯SQL或数据库?没有前端? – Edrich 2014-10-29 05:06:51
pure sql,没有前端〜 – xiaopassion 2014-10-29 05:09:59
我相信@Edirich希望你指定你是否运行MySQL,Oracle,SQL Server等。 – 2014-10-29 05:18:51