2012-09-23 2 views
1

저는 Oracle에 매우 익숙합니다. 프로젝트에 대한 쿼리를 개발 중입니다. 내게는 모든 것이 괜찮은 것 같다. 그러나 쿼리 오라클을 실행하면 "ORA-00905 : missing keyword"오류가 발생한다.Oracle 쿼리를 실행할 때 오류가 발생했습니다.

그녀는 내 질문 : 내가 놓친 거지 키 어떤 단어

SELECT DISTINCT ba.uuid AS uuid 
    , COUNT(*) over() AS rowcount 
FROM basicaddress ba 
WHERE ba.postalcode='143456' 
    OR ba.lastname LIKE '%143456%' 
    OR ba.city LIKE '%143456%' 
GROUP BY CASE WHEN ba.postalcode='143456' THEN ba.postalcode, ba.uuid END 
     , CASE WHEN ba.lastname LIKE '%143456%' THEN ba.lastname, ba.uuid END 
     , CASE WHEN ba.city LIKE '%143456%' THEN ba.city, ba.uuid 
              ELSE ba.postalcode,ba.uuid END 
ORDER BY CASE WHEN ba.postalcode='143456' THEN ba.postalcode END DESC 
     , CASE WHEN ba.lastname LIKE '%143456%' THEN ba.lastname END ASC 
     , CASE WHEN ba.city LIKE '%143456%' THEN ba.city ASC 
              ELSE ba.postalcode END DESC 

입니까? 어떤 도움이라도 대단히 감사하겠습니다.

답변

2

오류는 CASE 문 당신은 ba.postalcodeba.uuid 사이에서 결정해야

CASE 
    WHEN ba.postalcode='143456' 
    THEN ba.postalcode, ba.uuid <-- here. You can return value of only one column 
END;       

입니다. 또는 최종 결과 집합의 두 열 값을 모두 보려면 암시 ​​적 또는 명시 적 형식 변환을 사용하여 || 연산자 또는 CONCAT 함수를 사용하여 연결하십시오.

+0

답변을 주셔서 대단히 감사합니다. ba.uuid와 oracle에게 "No GROUP BY expression"을 말하면 안됩니다. – user964147

+0

'uuid'는'GROUP BY' 절의'CASE' 문의 모든 결과에 존재합니다.'uuid' 컬럼을'CASE' 문의 앞에 올리면됩니다 :'group by uuid, CASE 언제 .... –

0

나는 아마 이런 식으로, 당신은 당신의 CASE 표현에 ELSE 절을 사용하도록 구성 의심 : 또한 COUNT() 기능에 over() 절을하지 않아도

SELECT DISTINCT ba.uuid AS uuid 
    , COUNT(*) AS rowcount 
FROM basicaddress ba 
WHERE ba.postalcode='143456' 
    OR ba.lastname LIKE '%143456%' 
    OR ba.city LIKE '%143456%' 
GROUP BY CASE WHEN ba.postalcode='143456' 
       THEN ba.postalcode 
       ELSE ba.uuid END 
     , CASE WHEN ba.lastname LIKE '%143456%' 
       THEN ba.lastname 
       ELSE ba.uuid END 
     , CASE WHEN ba.city LIKE '%143456%' 
       THEN ba.city 
       ELSE ba.postalcode,ba.uuid END 
ORDER BY CASE WHEN ba.postalcode='143456' 
       THEN ba.postalcode END DESC 
     , CASE WHEN ba.lastname LIKE '%143456%' 
       THEN ba.lastname END ASC 
     , CASE WHEN ba.city LIKE '%143456%' 
       THEN ba.city ASC 
       ELSE ba.postalcode END DESC 

. 또한 구문을 쉽게 이해할 수 있도록 쿼리를 다시 작성하고 CASE 식 중 하나에서 구문 오류라고 생각한 것을 수정했습니다. 안전을 위해 항상 ELSE 조건을 제공해야합니다. 나는 그 부분을 너에게 맡길 것이다.

관련 문제