try this:
SELECT * FROM
(SELECT a.用户ID,c.用户姓名,c.用户地址,(convert(varchar(10),b.使用数*100/a.使用数)+'%') as 异常差额,b.收费时间 as 异常年月
FROM 收费表 a 
LEFT JOIN 收费表 b
ON DATEDIFF(m,a.收费时间,b.收费时间) = 1
INNER JOIN 用户表 c
ON a.用户ID = c.用户ID
)
WHERE 异常差额 > 条件

解决方案 »

  1.   

    wd_318:确实很好,但是1:有些用户不是每个月都缴费,那样只有条件Datediff就不起作用了,只有一条压一条比较了,还有办法吗?
    2:考虑0值.不过到了这步,我应该可以解决了.
      

  2.   

    你说的第一个问题,不太好办,因为使用数可能也就不是一个月的,而是多个月的了。如果实在有这个要求,我觉得写一个存储过程,用游标逐行扫描进行选择效率会高一些。第二个问题好办,用case  when 使用数=0 then ....  esle ... end 就行了