2013-11-03 38 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

你好,MAHMOUD非常感谢你为宝贵的时间,帮助我OUT.I GOT IT正确的单一日期。可以帮助我多个日期。选择从EMPLOYEE_MAP WHERE DATE ='2013-11-20 00:00:00'AND WORKDAIRY_APPROVAL =( SELECT MIN(WORKDAIRY_APPROVAL)FROM EMPLOYEE_MAP WHERE DATE ='2013-11-20 00:00:00')。它为单个date.how工作以处理多个.dates – srikanth

相关问题