2012-02-28 3 views
0

친애하는 프로그래머, 단일 선택 쿼리에서 한 열 값을 다른 열과 비교해야합니다. 내 쿼리로SQL의 단일 선택 쿼리에서 한 열 값을 다른 열과 비교하십시오.

은 다음과 같이 간다 : 내 경우 조건에

SELECT ATTNLOG.emp_id, 
      ATTNLOG.tdate, 
      ATTNLOG.tdate_out, 
      (CASE WHEN EXISTS (SELECT * 
           FROM tbl_emp_overtime 
           WHERE emp_id=ATTNLOG.emp_id 
           AND ot_indate=ATTNLOG.tdate) 
       THEN 0 
       ELSE 1 
      END) as 'STATUS' 
    FROM tbl_emp_attn_log ATTNLOG 
    WHERE ATTNLOG.emp_id=201 

내가 ATTNLOG의 모든 행을 비교할 필요가 각각 상태를 제공합니다.

사실 결과는

EMP_ID TDATE  TDATE_OUT STATUS 
201 2012-2-26 2012-2-26 0 
201 2012-2-27 2012-2-27 1 

같은 행 값을 반환하고 테이블 tbl_emp_overtime는

emp_ID ot_indate 
201 2012-2-27 

같은 값을 가진다하지만 내 코드는

EMP_ID TDATE  TDATE_OUT STATUS 
201 2012-2-26 2012-2-26 1 
201 2012-2-27 2012-2-27 1 

처럼 제공하지만 포기하지 않는다 그 결과. 제발 도와주세요.

+1

오류/결과는 어떻게됩니까? –

+0

왼쪽 외부 조인을 만들고 null 값을 확인하는 것은 어떨까요? 그럴 거니? – NicolajB

답변

1

원래 데이터 형식이 datetime 경우 SQL 2008, date 데이터 형식으로 날짜를 캐스팅 사용하는 경우 도와주세요 :

SELECT * 
FROM tbl_emp_overtime 
WHERE emp_id=ATTNLOG.emp_id 
AND CAST(ot_indate as DATE)=CAST(ATTNLOG.tdate AS DATE) 
0

는 (*)

1

는 COUNT으로 시도하여 requitement로 GREATEST 또는 LEAST을 시도해보십시오

SELECT ATTNLOG.emp_id, 
      ATTNLOG.tdate, 
      ATTNLOG.tdate_out, 
      (CASE WHEN (SELECT count(*) 
           FROM tbl_emp_overtime 
           WHERE emp_id=ATTNLOG.emp_id 
           AND trunc(ot_indate)=(ATTNLOG.tdate)) > 0 THEN 0 
       ELSE 1 
      END) as 'STATUS' 
    FROM tbl_emp_attn_log ATTNLOG 
    WHERE ATTNLOG.emp_id=201 
+0

답장을 보내 주셔서 감사하지만 내 결과가 같습니다. –

+0

날짜가 비교되는 경우 일 수 있습니다. 날짜를자를 수 있습니까? 오라클에서 TRUNC() 함수를 호출하거나 or_char (date, 'dd-mon-yyyy') = to_char (date, 'dd-mon-yyyy')에서 char 날짜 마스크와 char 날짜 마스크를 비교하려고합니다. –

관련 문제