2015-01-09 4 views
0

게시물 주소가 포함 된 테이블이 있습니다. 내 쿼리는 다음과 같습니다 : 그것은 단지 하나 개의 행을 전달해야하기 때문에plsql 고급 또는 조건

SELECT "ID", postcode, numbertype, minnumber, maxnumber 
INTO huidigPostcodeID_FK, databasePostcode, databaseNumberType, databaseMinNumber, databaseMaxNumber 
FROM POSTCODE 
WHERE POSTCODE_ID = 79417568 AND (NUMBERTYPE = 'odd' OR NUMBERTYPE = 'mixed') 

대부분의 경우 이것은 잘 작동합니다. 두 개의 동일한 레코더가있는 경우 (하나는 numbertype = odd이고 다른 하나는 혼합 됨) 쿼리는 2 개의 행을 반환합니다.

 ID POSTCODE NUMBERTYPE MINNUMBER MAXNUMBER 
---------- -------- ---------- ---------- ---------- 
    395755 7941KD odd     9   9 
    395756 7941KD mixed    1   22 

나는 이것 때문에 오류가 발생하기를 바랍니다. 프로그래머가 numbertype = 'mixed'로 된 레코드 하나만 가져 오는 해결책이 있습니까?

그래서 위의 예에서 난 단지 표시하기 위해이 기록을 wan't : 당신은 집계하여이 작업을 수행 할 수

ID POSTCODE NUMBERTYPE MINNUMBER MAXNUMBER 

395756 7941KD mixed    1   22 
+0

plsql이 아니지만 귀하의 권리가 없다면 어떤 의미인지 확인하십시오. – Politiepet

+0

질문을 편집하고 원하는 기록을 보여주십시오. –

+0

그래서 원하는 결과가 무엇입니까? – jarlh

답변

2

내가 하나가이 달성하기 위해 윈도우 기능을 사용할 수 있습니다 생각 : postcode의 주어진 값에 대한 두 개의 레코드가있는 경우이 경우

SELECT "ID", postcode, numbertype, minnumber, maxnumber 
    INTO huidigPostcodeID_FK, databasePostcode, databaseNumberType, databaseMinNumber, databaseMaxNumber 
    FROM (
    SELECT "ID", postcode, numbertype, minnumber, maxnumber 
     , ROW_NUMBER() OVER (PARTITION BY postcode ORDER BY DECODE(numbertype, 'mixed', 0, 1)) AS rn 
     FROM postcode 
    WHERE postcode_id = 79417568 AND (numbertype = 'odd' OR numbertype = 'mixed') 
) WHERE rn = 1 

를, 그것은을 선택합니다 numbertype의 값은 'mixed'입니다. 하나는 OVER() 절에 단순히 ORDER BY numbertype을 사용할 수도 있지만 'mixed'이 먼저 와야한다고 명시하는 것은 아닙니다.

희망이 도움이됩니다.

0

. 그러나 당신이 원하는 것이 정확히 무엇인지 불분명합니다. 뭔가 같이 :

SELECT min(id), postcode, 
     (case when min(numbertype) = max(numbertype) then min(numbertype) 
      else 'mixed' 
     end) 
     min(minnumber), max(maxnumber) 
INTO huidigPostcodeID_FK, databasePostcode, databaseNumberType, databaseMinNumber, databaseMaxNumber 
FROM POSTCODE 
WHERE POSTCODE_ID = 79417568 AND (NUMBERTYPE = 'odd' OR NUMBERTYPE = 'mixed') 
GROUP BY postcode