仅当另一行中存在值时才选择一行

时间:2013-11-03 13:48:53

标签: mysql sql

我需要一个查询,其中数据来自客户端和主要批准记录到映射表中。如果数据可供客户批准,首先检查客户端批准,然后它应获取客户端批准。如果客户端没有可用的数据,那么它应该获取特定日期的主要批准记录。以下查询:

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

请帮帮我。

1 个答案:

答案 0 :(得分: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 

如果姓名是唯一的

,这样的话