2010-03-15 2 views
0

다음 스타일 테이블이 있다고 가정합니다. col1 col2와 col3은 같은 값 범위를 가지며 3 개의 열 중 2 개의 열에는 하나의 레코드가 선택됩니다. 값 조합 ('ab'및 'bc')과 같은 경우 다음 예에서 처음 세 개의 레코드를 선택해야합니다. 이 작업을 수행하는 좋은 방법은 무엇입니까? Sybase를 사용하고 있습니다.여러 필드의 조합이 특정 값과 같을 레코드를 선택하는 방법

| id | col1 | col2 | col3 | 
    1  ab  bc  null 
    2  null ab  bc 
    3  ab  ab  bc 
    4  de  ab  xy 

감사합니다.

답변

0

내가 확인베이스를 가지고 있지 않지만, 당신이 시도 할 수 있습니다 :

select * from Table where (col1 = "ab" or col2 = "ab" or Col3 = "ab") 
and (col1 = "bc" or col2 = "bc" or Col3 = "bc") 
-1

내가 여기에 주어진 대답은 완전히 허용에 동의하지만 내가 느끼는 그 몇 열보다이 있다면 그 WHERE 절의 비교를 중첩하는 것은 약간 번거롭고 읽기 어려울 수 있습니다. 나는 비슷한 문제를 극복해야만했고 다음과 같은 기법이 매우 유용하다는 것을 발견했다. (나는 위에 열거 된 문제를 해결하기 위해 그것을 적용했다.) 외부 쿼리의 Total을 평가하면 평가할 조건이 포함 된 열의 수를 늘리거나 줄이는 데 쉽게 적용 할 수 있습니다.

SELECT * 
FROM 
(SELECT id 
     , col1   
     , col2 
     , col3 
     , SUM(CASE WHEN UPPER(col1) IN ('AB', 'BC') THEN 1 ELSE 0 END 
      + CASE WHEN UPPER(col2) IN ('AB', 'BC') THEN 1 ELSE 0 END 
      + CASE WHEN UPPER(col3) IN ('AB', 'BC') THEN 1 ELSE 0 END) as Total 
FROM <table> 
GROUP BY id 
     , col1 
     , col2 
     , col3) as results 
WHERE Total >= 2 
ORDER BY id 
관련 문제