2013-11-03 3 views
0

클라이언트 및 주요 승인 레코드의 데이터가 매핑 테이블에 들어있는 쿼리가 필요합니다. 데이터가 클라이언트 승인을 위해 사용 가능한 경우 클라이언트 승인을 먼저 확인한 다음 클라이언트 승인을 가져와야합니다. 클라이언트에 사용할 수있는 데이터가 없으면 특정 날짜에 대한 주요 승인 레코드를 가져와야합니다. 다음 쿼리 :다른 값이있는 경우에만 하나의 행 선택

SELECT * FROM employee_map 
    WHERE DATE = '2013-11-13 00:00:00' 
    AND (WORKDAIRY_APPROVAL='ClientApproval' XOR WORKDAIRY_APPROVAL='MainApproval') 

은 13 번째 날짜에 2 행 출력을 제공하지만 20 일으로 날짜를 변경하면 주 승인을 얻게됩니다. 주 및 고객 승인이 모두 가능한 경우 고객 승인 데이터 만 필요합니다.

------------------------------- --------------------------------------- 
MAP_ID CATEGORY EMP_ID DATE  EMP_NAME EMP_SAL APPROVAL 
------------------------------------------ 
    1 DIRECT 1  11/13/2013 JOHN 5,000 MainApproval 
    2 DIRECT 1  11/13/2013 JOHN 5,000 ClientApproval 
    3 DIRECT 2  11/20/2013 RAJ  2,000 MainApproval 
    4 DIRECT 3  11/21/2013 Ram  1,000 ClientApproval 

나를 도와주세요. 이 같은

+0

이 sqlfiddle을 확인 고유합니다. – HerrSerker

+0

유용 할 수 있습니다 : https://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html – zundarz

답변

0
SELECT * FROM employee_map em 
JOIN 
(SELECT EMP_NAME, MAX(APPROVAL) AS APPROVAL FROM employee_map em 
    WHERE DATE BETWEEN '2013-11-01 00:00:00' AND '2013-11-13 00:00:00' 
    AND (WORKDAIRY_APPROVAL='ClientApproval' XOR WORKDAIRY_APPROVAL='MainApproval')) A 
ON A.EMP_NAME=em.EMP_NAME and A.APPROVAL = em.APPROVAL 

뭔가 이름은

+0

안녕 마모우, 나를 도우려는 귀중한 시간을 보냅시다. OUT.I 일일 정확한 수정. 여러 날짜를 도와 주실 수 있습니까? EMPLOYEE_MAP에서 DATE = '2013-11-20 00:00:00'및 WORKDAIRY_APPROVAL = ( EMPLOYEE_MAP에서 SELECT MIN (WORKDAIRY_APPROVAL)을 선택하십시오. WHERE DATE = '2013-11-20 00:00:00'). 단일 날짜 근무. 여러 개의 .dates 작업 – srikanth

관련 문제