时间段内月份统计, 查询结果循环

USE [CommunityApp]
GO
/****** Object:  StoredProcedure [dbo].[sp_count_OwnerPayList]    Script Date: 03/04/2016 11:32:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_count_OwnerPayList]  
 @CommunityIDs int,--如果为0查出所有的,不为0则查指定小区
 @FeeName nvarchar(50),
  @StarTime as datetime,--开始时间
 @EndTime as datetime --结束时间
AS
  declare @i int,
    @j int,
   @months nvarchar(50),--当前月
   @FeeMoney decimal(10, 2),
  @CommunityID int,
  @CommunityName nvarchar(50)
 
  
 DECLARE @tCommunity TABLE  --所有的小区
 (  
  CommunityID  int  ,
  CommunityName nvarchar(50)
  ,FlagID   TINYINT    
 ) 
  DECLARE @tYuefen TABLE  --所有的月份
 (  
  months nvarchar(50)
  ,FlagID   TINYINT    
 ) 
 DECLARE @tcount TABLE  
 (  
  CommunityName nvarchar(50),--小区
  Months   nvarchar(100),--月份
  FeeMoney  decimal(10, 2)  --缴费金额
 ) 
 
BEGIN  
--获得小区 star
IF @CommunityIDs=0
begin
 insert @tCommunity  select CommunityID,CommunityName,0 from CommunityBase.dbo.CommunityList
 end
 else
 begin
  insert @tCommunity  select CommunityID,CommunityName,0 from CommunityBase.dbo.CommunityList where CommunityID=@CommunityIDs
 end
--获得小区 end

--获得月份 star

;with t
as
(select @StarTime as y
 union all
 select  dateadd(m,1,y)from t where y <@EndTime)
 insert @tYuefen select  convert(varchar(7),y,120),0 from t
 
 
--获得月份 end

 
 SET @i=1  
 WHILE( @i>=1)  ---第一次循环star
 BEGIN  
    
  set @CommunityID=''  
   set @CommunityName=''  
  SELECT TOP 1 @CommunityID = CommunityID,@CommunityName = CommunityName FROM @tCommunity  WHERE flagID=0  
  SET @i=@@ROWCOUNT  
    
  IF @i<=0 GOTO Return_Lab  
     
 
 SET @j= 1
 WHILE( @j>=1) ---第二次循环star 
  BEGIN
     SELECT TOP 1 @months = months FROM @tYuefen  WHERE flagID=0  
  SET @j=@@ROWCOUNT  
  IF @j<=0 GOTO Return_Lab2  
  
  

   IF @FeeName=''
begin
   SELECT @FeeMoney=sum(FeeMoney) FROM OwnerPayList WHERE PayMonth=@months  and CommunityID= @CommunityID   --月份的钱
 end
 else
 begin
   SELECT @FeeMoney=sum(FeeMoney) FROM OwnerPayList WHERE PayMonth=@months and FeeName=@FeeName and CommunityID= @CommunityID   --月份的钱
 end
   
 if @FeeMoney is not null
 begin
  insert @tcount values(@CommunityName,@months,@FeeMoney)
  end
  
   IF @@error=0   
      UPDATE @tYuefen SET flagID=1 WHERE months = @months
 
 
  Return_Lab2:    
   end ---第二次循环 end
   
   IF @@error=0   
      UPDATE @tCommunity SET flagID=1 WHERE CommunityID = @CommunityID
       
 Return_Lab:  
 END  ---第一次循环 end
 select * from   @tcount


posted @ 2016-03-04 11:34  文艺流浪汉  阅读(417)  评论(0编辑  收藏  举报