태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

IO_List 연욱님에 한수

SQL 2007/06/07 10:48 by 아쿠아바다

원본 http://blog.naver.com/falconer00/80001926531

Table Name : IO_List

-------------------------------------
| KeyValue |   RefValue
-------------------------------------
|        a     |    123456789012                    ----> 정상
-------------------------------------
|        b     |    @23456789012                   ----> 정상
-------------------------------------
|        c     |    @@@@56789012                ----> 정상
-------------------------------------
|        d     |    @234567@@@@2
-------------------------------------
|        e     |    12@456789012
-------------------------------------
|        f      |    123456@@9012
-------------------------------------
|        g     |    @@@@56@@9012
-------------------------------------
|        h     |    @2345678@@@2
-------------------------------------

위와같이 테이블에 값이 들어 있습니다.

여기에서, a, b, c 와 같이 (정상이라 쓰여진 레코드)
  가.  @ 표시가 아예 없거나,
  나.  @ 표시가 맨 앞에 하나만 있거나,
  다.  아니면 @ 표시가 앞에서 4개 연속으로 있거나.. 

이런 경우를 제외한 모든 경우 (d, e, f, g, h)를 Select 하고자 합니다.

RefValue 의 자료형은 Char 형이며 값은 무조건 12자리로 고정되어 있습니다....

이런 경우 어떻게 쿼리를 해야 하는지요..

순삼님 답변:

Create Table #A(KeyValue Char(1) Not Null Primary Key,RefValue Char(12))

Set NoCount ON
Insert #A Values('a',         '123456789012')
Insert #A Values('b',         '@23456789012')            
Insert #A Values('c',         '@@@@56789012')         
Insert #A Values('d',         '@234567@@@@2')
Insert #A Values('e',         '12@456789012')
Insert #A Values('f',          '123456@@9012')
Insert #A Values('g',         '@@@@56@@9012')
Insert #A Values('h',         '@2345678@@@2')


Select *
From #A A
Where Not Exists (Select KeyValue
                             From #A B
                              Where  (Charindex('@',RefValue) < 1  OR
                                          (RefValue Like '@%' And CharIndex('@',SubString(RefValue,2,11)) < 1) OR
                                          (RefValue Like '@@@@%' And CharIndex('@',SubString(RefValue,5,8)) < 1)) And
                                           A.KeyValue = B.KeyValue)

연욱님  답변:

오랜만에 순삼님 답글에 딴지걸게되어서 영광입니다. ^^;

채장훈님, 가능하다면 테이블을 한번만 읽고처리하는것이 좋으며
더군다나 상관하위쿼리구문의 경우는 되도록이면 피하는것이 좋습니다.

select *
from #a
where charindex('@',RefValue,2) > 0 and (left(RefValue,4) <> '@@@@' or charindex('@',RefValue,5) > 0)

이와같이 하셔도 동일한 결과가 나올듯...


출처 : sqler


p.s 역시 연욱님에 한방쿼리문이네요. ^^;

한 테이블읽고라...i/o 음.....


^^;

'SQL' 카테고리의 다른 글

심심풀이 3탄  (0) 2007/06/07
심심풀이 4.5탄  (0) 2007/06/07
ASP에 날짜시간에서 시간 오전/오후 제거하고 시간 24..  (0) 2007/06/07
심심풀이 1탄  (0) 2007/06/07
심심풀이 2탄  (0) 2007/06/07
IO_List 연욱님에 한수  (0) 2007/06/07
좀더 흥미로운 내용이 많이 있습니다.. HOME > SQL를 확인하세요
TAG   
0 Trackback, 0 Comment, :
1  ... 625 626 627 628 629 630 631 632 633  ... 769 
Statistics Graph
Total : 557,110 Today : 171