2010-07-02 3 views
3

CASE 문으로 쿼리를 실행할 때 문제가 있습니다. 제 조건 (예 : 길이)에 따라 다른 SQL 문을 실행하고 싶습니다.사례를 기반으로 다른 SELECT 문을 실행하는 방법

select case 
    when char_length('19480821') = 8 
     then select count(1) from Patient 
    when char_length('19480821')=10 
     then select count(1) from Doctor 
end 

예외 :

[오류] 스크립트 라인 : 1-5 --------------- 다음과 같이

문제있는 샘플 쿼리입니다 -----------
'select'키워드 근처의 구문이 잘못되었습니다.
메시지 : 156, 레벨 : 15, 상태 : 2
서버 : sunsrv4z7, 라인 : 2

내가 구문을 정정 할 수 없습니다입니다. char_length에 대한 문자열을 사용자로부터의 입력으로 받고 있습니다. 특정 조건을 기반으로 쿼리를 실행하려면 어떻게해야합니까? 사례가 올바른 선택입니까? 아니면 다른 것을 사용해야합니까?

답변

1
select 
    case when char_length('19480821')=8 then (select count(1) from Patient) 
     when char_length('19480821')=10 then (select count(1) from Doctor) 
    end 

문제는 당신이 오프닝을 누락

+1

당신은 두 번째 다음 절에서 여는 괄호를 이동 할 수 있습니다 한마디 옳아. – potatopeelings

+1

여전히 thrid 행에 다음 브래킷 –

+0

덕분에 구문 오류가 있습니다. 고정 : – VoodooChild

4

그냥 오프닝을 넣어 : 당신의 중첩 된 '선택'문에서 괄호를 닫고 주위를 선택 문을 해결하면 문제를 브래킷을 닫는 것입니다

select 
    case when 
     char_length('19480821')=8 then 
      (select count(1) from Patient) 
     when 
     char_length('19480821')=10 then 
      (select count(1) from Doctor) 
     end 
+0

+1 lol, 그것을 이길! – VoodooChild

+0

예 .................. –

2

그것이 사실이 아니란 점에 유의하십시오. 진술, 그것은 사례 표현입니다. 쿼리를 괄호로 묶으면 구문 적으로 값으로 변환됩니다. 같은 로

이 하위 쿼리에 원칙적으로 유사하다 "의사에서 이름을 선택 경우 급여 = (선택 최대 의사 (급여))"

관련 문제