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

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 [email protected]  and CommunityID= @CommunityID   --月份的钱
 end
 else
 begin
   SELECT @FeeMoney=sum(FeeMoney) FROM OwnerPayList WHERE [email protected] and [email protected] 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
时间: 2024-08-25 04:49:18

时间段内月份统计, 查询结果循环的相关文章

sql语句按月份统计查询

select year(createdate) 年,month(createdate) 月,count(1) from public_cms_arcwhere (userid in (select id from  cms_admin where userid='392') or userid='392')group by year(createdate),month(createdate)order by year(createdate) desc,month(createdate) desc

用redis实现动态时间段内统计排序

问题描述 需要根据某类数据在动态时间段内的统计值对这些数据进行排名.例如按过去24小时内点赞数排名的帖子,每隔一小时计算一次结果.以下描述均针对这个例子展开. 解决思路 针对这种问题,我的第一反应是直接通过 mysql一张数据表记录所有数据的每一条统计值改变的行为,例如记下每个帖子在哪个时间点被谁点赞.排序结果直接通过 select + where + order_by + limit.简单粗暴,但效率低下,扩展性差,而且当数据量很多时,会导致数据库查询效率低下. 那么为了提高效率, mysql

帆软报表查询时间段内的月份

用帆软报表做统计时,经常要用到查询时间段内的月份.sql如下(oracle): SELECT TO_CHAR(ADD_MONTHS(TO_DATE('${STARTTIME}', 'YYYY-MM'), ROWNUM - 1),'yyyy-MM') eDate, TO_CHAR(ADD_MONTHS(TO_DATE('${STARTTIME}', 'YYYY-MM'), ROWNUM - 1),'MM') DAY_ID, TO_CHAR(ADD_MONTHS(TO_DATE('${STARTTI

统计查询时间段内工作日之和

今天有个需求是这样的,要查出本月的工作日之和,在网上搜索了一下,发现看起来最简单的是这样的: 1 DECLARE @DAY DATE,@COUNT INT 2 SET @DAY=CONVERT(VARCHAR(10),Dateadd(dd, -Datepart(dd,GetDate())+ 1,GetDate()), 23) 3 SET @COUNT=0 4 WHILE @DAY<=CONVERT(VARCHAR(100), GetDate(),23) 5 BEGIN 6 SET @COUNT=

mysql查询特定时间段内的数据

SET FOREIGN_KEY_CHECKS=0; -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( userId bigint(20) NOT NULL, fullName varchar(64) NOT NULL, userType varchar(16) NOT NULL, addedTime datetime NO

MySQL 查询时间段内的数据

先来建表语句: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `userId` bigint(20) NOT NULL, `fullName` varchar(64) NOT NULL, `use

sql查询时间段内所有周六日

查询说时间段内所有周六日 DECLARE @t TABLE(date0 DATETIME) DECLARE @st DATETIME,@et DATETIME SET @st='2007-01-01' SET @et='2008-01-01' WHILE @st <@et BEGIN INSERT INTO @t VALUES(@st) SELECT @st=DATEADD(DAY,1,@st) END SELECT date0,DATENAME(weekday,date0) FROM @t W

SQL查询出当前服务器时间是否在表T1时间段内,如果有则选择出

表T1 开始 时间         结束时间          09:00:00          12:00:00      14:00:00          17:00:00 查询出当前服务器时间是否在表T1时间段内,如果有则选择出 选出的sql结果集如下,求SQL,  注:SQL2000环境 开始 时间         结束时间           14:00:00          17:00:00 方法一: DECLARE @t TABLE (     beginTime CHAR(

Sqlite查询时间段内的数据问题解决!

最近搞Sqlite本地查询,需求为查询某时间段内的数据,在SQL中我们都知道为: [sql] view plaincopyprint? select * from tblName where rDate Between '2008-6-10' and  '2008-6-12' select * from tblName where rDate Between '2008-6-10' and '2008-6-12' 这样子是没有问题的,但是在Sqlite中我们这样子写是得不到结果的,试了好多次终于