2012-05-22 5 views
0

일부 SQL에 대한 약간의 도움이 필요합니다. VARCHAR 값을 사용하여 WHERE 절에서 사용할 논리를 결정하지만이 사례 문을 쓰는 데 문제가 있습니다. 키워드 근처T-SQL where 절 case 문

where 
    (CASE WHEN @p_flag = 'ATA' 
      THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata) 
     ELSE (@p_start_atd IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd) 
) 

라인 (93)이 잘못된 구문 '는'.

그것의 아마 사소한 오류하지만 나를 좌절. 어쩌면 이것을 쓰는 더 좋은 방법이 있을까요? 감사!

+1

CASE 문은 전체 코드 블록이 아닌 ** 값 **만을 제공 할 수 있습니다. 당신은 논리를 재정렬해야합니다 –

답변

2

앞에서 말한 것처럼 당신이하는 것처럼 당신은 case 문을 사용할 수 없습니다. 따라서 이것은 제안 일 수 있습니다 :

WHERE 
    (
     @p_flag = 'ATA' 
     AND 
      (
       (@p_start_ata IS NULL AND @p_end_ata) 
       OR (vso.poa_ata between @p_start_ata and @p_end_ata) 
      ) 
    ) 
    OR 
    (
     NOT @p_flag = 'ATA' 
     AND 
      (
       (@p_start_atd IS NULL AND @p_end_atd IS NULL) 
       OR (vso.pol_atd between @p_start_atd and @p_end_atd) 
      ) 
    ) 
+0

고마워요. 하나 또는 다른 sql 블록을 실행하는 부울 조건을 찾고 있었지만 where 절에 쓰는 방법을 알지 못했습니다. 이것은 도움이되었습니다. –

+0

@nickgowdy : 문제 없습니다. 다행스럽게도 : P – Arion

0

당신은 그와 같은 CASE을 사용할 수 없습니다!

값을 가져 오는 데는 제한이 없습니다. Check thisCASE을 올바르게 사용하는 방법을 확인하십시오. 당신은 아마 IF 년대를하고 싶어 SELECT 만들기 '의 사용의 당신의 논리를 변경했습니다 귀하의 경우


.