我有这样的查询:
SELECT distinct(A.EMP_ID), C.MAINT_ID
FROM EMPLOYEE_MASTER A
LEFT OUTER JOIN DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID
返回以下输出。
EMP_ID |MAINT_ID
----------------
15 NULL
16 NULL
17 NULL
18 1
18 2
18 3
19 NULL
20 NULL
21 4
21 5
22 NULL
23 NULL
现在我需要的实际结果是
例如,对于Emp_id 18,有三条记录。但我需要最大的一个,即maint_id = 3
所以我期望的输出就像
EMP_ID MAINT_ID
------------------
15 NULL
16 NULL
17 NULL
18 3
19 NULL
20 NULL
21 5
22 NULL
23 NULL
到目前为止我尝试过的是
SELECT
(A.EMP_ID), C.MAINT_ID
FROM
EMPLOYEE_MASTER A
LEFT OUTER JOIN
DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID
AND C.MAINT_ID = (SELECT TOP(1) MAINT_ID
FROM DESIGNATION_MAINTENANCE
ORDER BY MAINT_ID DESC)
返回:
EMP_ID MAINT_ID
------------------
15 NULL
16 NULL
17 NULL
18 NULL
19 NULL
20 NULL
21 5
22 NULL
23 NULL
这不是我的期望。怎么做?任何帮助表示赞赏
答案 0 :(得分:1)
您可以简单地使用MAX
并在以下内容中添加GROUP BY
子句:
SELECT (A.EMP_ID)
,MAX(C.MAINT_ID ) MAINT_ID
FROM EMPLOYEE_MASTER A
LEFT OUTER JOIN DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID
GROUP BY A.EMP_ID
或者如果你想在子查询中使用这个糟糕的解决方案,请尝试以下方法:
SELECT (A.EMP_ID)
,C.MAINT_ID
FROM EMPLOYEE_MASTER A
LEFT OUTER JOIN DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID AND
C.MAINT_ID =(select top(1) MAINT_ID from DESIGNATION_MAINTENANCE C1 WHERE C.EMP_ID = C1.EMP_ID ORDER BY MAINT_ID DESC)
答案 1 :(得分:0)
试试这个:
SELECT (A.EMP_ID)
,C.MAINT_ID FROM
EMPLOYEE_MASTER A LEFT OUTER JOIN
(SELECT EMP_ID, MAX(MAINT_ID) AS MAINT_ID FROM DESIGNATION_MAINTENANCE GROUP BY EMP_ID) C
ON A.EMP_ID = C.EMP_ID
;