你应该有交费记录,也应该有交费标志(eg:flag 0代表没有交费,1代表交费)
这样不就可以查询了

解决方案 »

  1.   

    这个是新增交费记录的存储过程
    要交了费才有这个月的记录ALTER    procedure sp_txbd_dl_list
    @UserID nvarchar(8),
    @UserName nvarchar(50),
    @Sdate nvarchar(10),
    @UserTel nvarchar(20),
    @ByqID nvarchar(10),
    @Bl nvarchar(10),
    @UserAdd nvarchar(80),
    @Djlb nvarchar(50),
    @A_Dbbh nvarchar(20),
    @A_Sybd bigint,
    @A_Bybd bigint,
    @B_Dbbh nvarchar(20),
    @B_Sybd bigint,
    @B_Bybd bigint,
    @C_Dbbh nvarchar(20),
    @C_Sybd bigint,
    @C_Bybd bigint,
    @Dl float(8),
    @Dj float(8),
    @Df float(8),
    @Res nvarchar(260)
    as
    insert into dl_user_bd_list
    (UserID,UserName,Sdate,UserTel,ByqID,Bl,UserAdd,Djlb,A_Dbbh,A_Sybd,A_Bybd,B_Dbbh,B_Sybd,B_Bybd,C_Dbbh,C_Sybd,C_Bybd,Dl,Dj,Df,Res,PrintBZ,uLock)
    values
    (@UserID,@UserName,@Sdate,@UserTel,@ByqID,@Bl,@UserAdd,@Djlb,@A_Dbbh,@A_Sybd,@A_bybd,@B_Dbbh,@B_Sybd,@B_bybd,@C_Dbbh,@C_Sybd,@C_bybd,@Dl,@Dj,@Df,@Res,'No','0')
      

  2.   

    /*
    担心存在sdate数据为:2005-5-1这样不规范得数据,所以转化为datetime数据类型,如果数据规范,可以直接max.
    通过查找最近交费的来获取。如果以前的数据不连续,则此过程不能找到以前的未交费的记录。
    */
    declare @int int,@sum varchar(200),@lastdt datetime
    select @lastdt=max(convert(datetime,sdate)) from dl_user_bd_list
    select @int=datediff(m,@lastdt,getdate())
    select @sum=''
    while @int>0
       begin
    select @sum=@sum+','+convert(varchar(7),dateadd(m,-@int+1,getdate()),120)
    select @int=@int-1
       end
    select @sum=stuff(@sum,1,1,'')
    select @sum
      

  3.   

    select * from dl_user_bd_list where ((year(sdate)=year(date1) and month(sdate)>month(date1)) or year(sdate)>year(date1)) and ((year(sdate)=year(date2) and month(sdate)<month(date2)) or year(sdate)<year(date1))
      

  4.   

    select * from dl_user_bd_list where ((year(sdate)=year(date1) and month(sdate)>month(date1)) or year(sdate)>year(date1)) and ((year(sdate)=year(date2) and month(sdate)<month(date2)) or year(sdate)<year(date2))不好意思,应该是这样