2016-10-06 3 views
0

PostgreSQL 8.2를 사용하고 있으며 PostgreSQL을 처음 사용합니다.PostgreSQL : CASE를 사용하여 where 절에 조건 추가

필드의 특정 값 (49) (activity.type)에 따라 하나의 조건을 WHERE 절에 추가해야합니다.

SELECT activity.* 
FROM activity 
LEFT JOIN event_types ON activity.customstatusid = event_types.id, getviewableemployees(3222, NULL) AS report 
WHERE 
( 
    CASE WHEN activity.type = 49 THEN 
    'activity.individualid IN(SELECT individualid from prospects where prospects.individualid = activity.individualid)' 
    ELSE 1 
    END 
) 
AND activity.date BETWEEN '2016-10-01' AND '2016-10-06' 
AND activity.type IN (21, 22, 49, 50, 37, 199) 
AND (event_types.status = 1 or event_types.status IS NULL); 

내가 PGSQL의 명령 줄 액세스 쿼리 위의 실행 후 나는 오류가 아래 얻을 :

ERROR: invalid input syntax for integer: "activity.individualid IN(SELECT individualid from prospects where prospects.individualid = activity.individualid)" 

내가 여기 실종 여기 내 검색어는?

+0

WHERE 절에서 구현하려는 논리는 무엇입니까? –

+0

나는 activity.type = 49를 확인한 다음 잠재 고객 테이블에서 activity.individualid를 확인하는 다른 하위 쿼리를 반환하는 CASE를 사용하고 있습니다. 이것은 구현하려고하는 논리입니다. – deltaforce

+0

분명히, 당신은 이것을 할 수는 없지만 @donkopotamus에 의한 답을 살펴보십시오. 이것은 여러분이 염두에 두었던 것처럼 보입니다. –

답변

2

당신 절로 구현 : 첫 번째 절은 사실이 될 것이다

WHERE (
    activity.type != 49 OR 
    activity.individualid IN (
     SELECT individualid from prospects 
     WHERE prospects.individualid = activity.individualid) 
) 
AND activity.date BETWEEN '2016-10-01' AND '2016-10-06' 
AND activity.type IN (21, 22, 49, 50, 37, 199) 
AND (event_types.status = 1 or event_types.status IS NULL); 

때 다음 중 하나를

  • activity.type != 49; 또는
  • activity.type == 49activity.individualid이 하위 쿼리에 있습니다.
+0

activity.tind = 49에 대해서만 activity.individualid에 대한 하위 쿼리를 사용해야합니다. 또한 모든 유형의 활동을 포함해야합니다. – deltaforce

+0

@deltaforce 예 ...이 절에서 하위 쿼리는'activity.type = 49' 일 때만 관련이 있습니다 – donkopotamus

+0

아, 방금 들었습니다. 그것은 일했다 !!!! 응답 해 주셔서 고맙습니다. – deltaforce