如何在存储过程中使用group by子句 [英] How to use group by having clause in stored procedure

查看:566
本文介绍了如何在存储过程中使用group by子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我有CircleId如下:1,2,3,... 10,11,12,13,14等等。

我有FileType如下:DBBH,NBH,DBH,BBH

我在我的存储过程中完全感到困惑。

我的存储过程中有两个条件如下:

第一条件:如果我发现circleID = 14的记录数大于等于4则不允许保存记录。

第二条件:如果记录是已经存在返回零。



Hi Everyone,
I have CircleId as follows: 1,2,3,...10,11,12,13,14 and so on.
I have FileType as Follows: DBBH,NBH,DBH,BBH
I am totally confused in my Stored procedure.
There are two Condition in my Stored procedure as follows:
First Condition:if i found the number of records greater than equal to 4 for circleID = 14 then it will not allowed to save the record.
Second Condition:if records is already exists return zero.

ALTER PROCEDURE [dbo].[K2_CHECKENTRYINFILELOG] 
@FILENAME VARCHAR(150),
@FILEPATH VARCHAR(MAX),
@FILETYPE int,
@FILEDATE datetime,
@CIRCLEID INT,
@TOTALROWS int,
@SUCCESSCOUNT int,
@FAILURECOUNT int,
@PROCESSED bit,
@ERROR varchar(MAX),
@VENDORID int,
@CREATEDBY INT = 1,
@CREATEDON DATETIME,
@DELETED BIT=0,
@FILELOGID bigINT OUT

AS	
BEGIN	
declare @Count int	
select @Count = count(*) from K2FILELOG where FILETYPE = @FILETYPE and	
                                              FILEDATE = @FILEDATE and	
                                              CIRCLEID = @CIRCLEID and	
                                              Processed = 1   	
IF (@Count = 1)	
BEGIN	
set @FILELOGID = -1	
return;	
  select FILETYPE,FILEDATE,CIRCLEID from K2FILELOG with (nolock) GROUP BY CIRCLEID
   having count(*) >= 4
/* where FILEPATH
          [FILENAME]
          FILETYPE = @FILETYPE and	
          FILEDATE = @FILEDATE and	
          CIRCLEID = @CIRCLEID and
          TOTALROWS =@TOTALROWS and
          SUCCESSCOUNT = @SUCCESSCOUNT and
          FAILURECOUNT = @FAILURECOUNT and
          PROCESSED=@PROCESSED and
          ERROR = @ERROR and
          VENDORID = @VENDORID and
          CREATEDBY =  @CREATEDBY and
          CREATEDON =@CREATEDON and
          DELETED = @DELETED	*/
END	

ELSE IF	
@CIRCLEID >= 14 	
BEGIN	
SET @FILELOGID  = -1	
RETURN ;	
END	
ELSE	
BEGIN	
	INSERT INTO K2FILELOG
	   (FILEPATH, [FILENAME],FILETYPE,FILEDATE,CIRCLEID,TOTALROWS,SUCCESSCOUNT,FAILURECOUNT,PROCESSED,ERROR,VENDORID,CREATEDBY, CREATEDON, DELETED)
values (@FILEPATH ,@FILENAME,@FILETYPE,@FILEDATE,@CIRCLEID,@TOTALROWS,@SUCCESSCOUNT,@FAILURECOUNT,@PROCESSED,@ERROR ,@VENDORID,@CREATEDBY,@CREATEDON,@DELETED);	
 set @FILELOGID = @@identity;	
END	
	
END	

推荐答案

请参阅此链接以了解如何使用Group by和having子句



http://www.dotnet-tricks.com/Tutorial/sqlserver/HQV8310312-Definition,-Use-of-Group-by-and-Having-Clause.html [ ^ ]
refer this link for how to use Group by and having clause

http://www.dotnet-tricks.com/Tutorial/sqlserver/HQV8310312-Definition,-Use-of-Group-by-and-Having-Clause.html[^]


这篇关于如何在存储过程中使用group by子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆