3초기억력

mssql 프로시저 cursor, charindex 사용하여, ','파싱한 값을 그룹핑 카운트 본문

쿼리_MSSQL

mssql 프로시저 cursor, charindex 사용하여, ','파싱한 값을 그룹핑 카운트

잠수콩 2017. 1. 9. 14:55



제목 : mssql 프로시저 cursor, charindex 사용하여, ','파싱한 값을 그룹핑 카운트




소스 :


alter PROCEDURE SP_VIEW_STATIC_MEMBER_REFERER

AS

BEGIN

DECLARE @pos INT

DECLARE @delimiterLen INT

DECLARE @value VARCHAR(100)

DECLARE @delimiter VARCHAR(10)

SET @delimiter = ',';

SET @delimiterLen = LEN(@delimiter);

SET NOCOUNT ON;

create table #temp(item int)


    DECLARE isReferer_Cursor CURSOR FOR  

    

select replace(isReferer, ' ', '') as isReferer from T_MEMBER where isReferer <> '';

OPEN isReferer_Cursor;  

declare @isReferer varchar(100);

declare @data varchar(100);

FETCH NEXT FROM isReferer_Cursor

into @isReferer;  

WHILE @@FETCH_STATUS = 0  

BEGIN  

SET @data = @isReferer

WHILE LEN(@data) > 0

BEGIN

SET @pos = CHARINDEX(@delimiter, @data)

IF (@pos = 0)

BEGIN

INSERT INTO #temp (item) VALUES (cast(@data as int))

break;

END

else if  (@pos > 0)

begin

SET @value = SUBSTRING(@data, 0, @pos)

SET @data = SUBSTRING(@data, @pos+@delimiterLen, LEN(@data)-@pos )

INSERT INTO #temp (item) VALUES (cast(@value as int))

continue;

end

END

FETCH NEXT FROM isReferer_Cursor into @isReferer;  

END;  

CLOSE isReferer_Cursor;  

DEALLOCATE isReferer_Cursor; 

    

    SELECT item, COUNT(*) as itemCount FROM #temp group by item ORDER BY item asc

    

END

GO




내용 :


isReferer isReferer_etc

1               NULL

2, 6         NULL

3         NULL

2, 7         NULL

1, 4, 5 NULL

1, 2, 3, 8 NULL

9, 10         인터넷

6, 10         지인 소개


//////////////////////////////////

t_member 라는 테이블에 isReferer, isReferer_etc 컬럼을 두고, 회원가입시 회원가입 경로를 체크하는값을 isReferer 에 넣었다면...


해당 가입경로를 group by 하여, 가입경로별 갯수 파악하기 위함.


결과

1        11

2        22

3        33

4        31

5        12        

6        331

7        3

8        55

9        13

10      555







예제 소스 파일 :


 출처 :  




Comments