mssql 프로시저 cursor, charindex 사용하여, ','파싱한 값을 그룹핑 카운트
제목 : 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
예제 소스 파일 :
출처 :