database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1947 게시물 읽기
No. 1947
구분자로 짤라 주세요.
작성자
초보자
작성일
2005-05-09 17:49
조회수
2,788

안녕하세요,

컬럼에 데이터가 아래와 같이 있습니다.

---------------

컬럼 a

--------------

100||200||300

100||200

300

100||200||300

---------------

"||"구분자로 구분하여 갯수를 세고 싶습니다.

100의 관련된것은 3개

200의 관련된것은 3개

이런식으로요..

 

어떤식으로 해야 하나요??

고수님들의 답변 기다리고 있겠습니다.

 

이 글에 대한 댓글이 총 3건 있습니다.

답변이 없네요.

저는 예제대로 이 문제를 해결할까 말까를 고민했는데

우선 로직부터 말씀드리죠.

1) temp table을 만듦 (칼럼에는 data하나만 들갈수 있는)

2) ||를 검색하여 없으면 temp table에 삽입

    있으면 단어를 분리하여 temp_tabe에 삽입

3) 2의 과정을 다 마쳤다면 counting하여 버리면 됩니다.

 

너무 성의 없는 답변이죠 ^^

곧 예제 하나 만들어 보죠

여리님이 2005-05-11 08:59에 작성한 댓글입니다. Edit

/*

--여긴 확인 사살 및 Data 입력
create table tempTb
(
idx int identity(1,1),
aa varchar(50))
--drop table tempTb

insert into tempTb values ('100||200||300')
insert into tempTb values ('100||200')
insert into tempTb values ('300')
insert into tempTb values ('100||200||300')
insert into tempTb values ('100||200||300||400')
select * from tempTb
*/

 

여기가 실구문입니다.

 

declare  @tstr varchar(100)
, @i int
, @tsql varchar(5000)
, @k int

create table #tbTemp
(aa varchar(50))

set @k = 1
while exists (select aa from tempTb where idx = @k)
Begin
 select @tstr=aa from tempTb where idx = @k
  select @i = charindex('||', @tstr)
  if @i > 0
   begin
    while @i > 0
     begin
   insert into #tbTemp values(left(@tstr, charIndex('||', @tstr)-1))
   select @tstr = substring(@tstr, charindex('||',  @tstr) + 2, len(@tstr))
   select @i = charindex('||' , @tstr)
     end
    select @tsql = left(@tsql,  len(@tsql)-2)
    insert into #tbTemp values (@tstr)
   end
  else
   insert into #tbTemp values(@tstr)

 set @k = @k + 1
End

select aa, count(aa) as cnt from #tbTemp
group by aa
order by aa

drop table  #tbTemp

 

--결과의 모습은 아래와 같습니다.

 

aa                                                 cnt
------------------------------ -----------
100                                                4
200                                                4
300                                                4
400                                                1

(4 row(s) affected)

 

여리님이 2005-05-11 09:41에 작성한 댓글입니다.
이 댓글은 2005-05-11 09:42에 마지막으로 수정되었습니다. Edit

 

FUNCTION  이용 해봤습니다.

create table #A (col varchar(1000))

insert #A select '100||200||300'

 

 

create  FUNCTION  FUN_SJR_1 (@InEmpId varchar(100))
RETURNS int 
as
BEGIN
 declare  @retuncnt int
 set @retuncnt = 0
  while  0 <>  charindex('||',@InEmpId)
 begin
  set @InEmpId = substring(   @InEmpId, charindex('||',@InEmpId)+2,len( @InEmpId))
  set @retuncnt = @retuncnt +1   
 end
    RETURN (@retuncnt)
END

SELECT col, dbo.FUN_SJR_1(col) from #A
 

행복님님이 2005-05-24 12:00에 작성한 댓글입니다.
이 댓글은 2005-05-24 12:01에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1950두개씩 보이네요;; [1]
저격수장금
2005-05-11
1559
1949최대의 자료를 추출하려면....-.- [1]
낼해
2005-05-11
1605
1948지금 EM에서 여리님이 알려 주신것으로 처리해서 자신의 DB 이외에는 접근 못하게 했습니다. [2]
김정운
2005-05-10
1871
1947구분자로 짤라 주세요. [3]
초보자
2005-05-09
2788
1946도와주세여~~ 플리쥬~~~ ㅠ.ㅠ [2]
초보여인
2005-05-06
1836
1945DateTime Comlumn을 조건으로 검색할때.... [1]
고영훈
2005-05-06
3126
1944ANSI SQL... What is it and what do you do with it? [3]
석이
2005-05-05
3762
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다