积分报表sql语句异常

积分报表sql语句错误基本表:xf_vip(会员信息) , XF_BONUSLEDGER (积分信息)两表唯一相同列为 XF_VIPCODE(

积分报表sql语句错误
基本表:xf_vip(会员信息) , XF_BONUSLEDGER (积分信息)
两表唯一相同列为 XF_VIPCODE(卡号,又叫会员号)

筛选条件
卡号:   至
性别:   男或女或不限
会员等级: XF_GRADE
消费时间段:XF_BONUSLEDGER.XF_TXDATE    
出生日期:XF_DOB
办卡日期:XF_JOINTDATE
消费金额:XF_BONUSLEDGER .XF_AMOUNT
积分排名:
积分区间内:
排序  按会员号

题目:依照样例按要求查询出每人的基本信息与积分状况
所求结果样例:
积分报表sql语句异常
解释:xf_vip表每人只有一条记录,XF_BONUSLEDGER表每人有多条记录。结果样例中最后三列为XF_BONUSLEDGER表字段采用sum,前面的全为xf_vip表字段。积分有正有负,当前积分为按人分组把所有积分加起来,历史积分为只把正数的积分加起来。

现在我只是试验,只用卡号作为筛选,其它条件暂不做,所写sql语句如下:



XF_BONUSLEDGER:
积分报表sql语句异常
[解决办法]
引用:
Quote: 引用:

为什么要关联2次XF_BONUSLEDGER? 表呢

不关联也是错


我感觉下面这样写,应该能达到你的需求啊:

select a.xf_vipcode,
       xf_surname,
       xf_telephone,
       xf_address1,
       xf_sex,
       xf_dob,
       xf_jointdate,
       SUM(a.xf_bonus) AS 当前积分,
       SUM(a.xf_amount) AS 购买金额,
       SUM(case
             when a.xf_bonus > 0 then
              a.xf_bonus
             else
              o
           end) AS 历史积分
  FROM XF_VIP, XF_BONUSLEDGER a
 WHERE a.xf_vipcode BETWEEN '000000004' AND '600010651'


   AND a.xf_vipcode = xf_vip.xf_vipcode
 GROUP BY a.xf_vipcode,
          xf_surname,
          xf_telephone,
          xf_address1,
          xf_sex,
          xf_dob,
          xf_jointdate
 ORDER BY a.xf_vipcode;