2014-10-22 3 views
-2

EMPLID, Z_SERV_DT_TYPE 및 SERVICE_DT 필드를 찾으려고합니다. 대부분의 EMPLID에는 'SAD'와 'TED'Z_SERV_DT_TYPE이 있습니다. 나는 그들을 모두 함께 그룹화하고 SERVICE_DT 필드를 볼 수 있도록 데이터를 정렬하기가 더 쉽습니다. 내가 '아래 표현을 통해 그룹이 아니라'라고 말하지만 아래를 실행할 때 누군가 내가 뭘 잘못하고 있는지 알 수 있습니까?Oracle 그룹 SQL이 작동하지 않음

select EMPLID, Z_SERV_DT_TYPE, SERVICE_DT 
from PS_Z_ADD_EMP_SRVDT 
where Z_SERV_DT_TYPE IN ('TED', 'SAD') 
GROUP BY EMPLID 
+1

왜 'group by'을 (를) 사용하십니까? 내가 말할 수있는 한 간단하게 '명령에 의한 질서'를 원한다. –

답변

0

당신은 모든 직원을 나열하여 그룹을 필요로하지 않는 경우 TED를 입력하고 SAD

select EMPLID, Z_SERV_DT_TYPE, SERVICE_DT 
from PS_Z_ADD_EMP_SRVDT 
where Z_SERV_DT_TYPE IN ('TED', 'SAD') 
order by Z_SERV_DT_TYPE 

경우가 그룹에있는 모든 열이 있어야 선택 당신은 카운트를 얻고 싶다면 GROUP BY

select EMPLID, Z_SERV_DT_TYPE, COUNT(*) 
from PS_Z_ADD_EMP_SRVDT 
where Z_SERV_DT_TYPE IN ('TED', 'SAD') 
group by EMPLID, Z_SERV_DT_TYPE 
0

최대 날짜를 원한다면 즉 집계 함수를 사용하지 않는 모든 열을 포함 BY GROUP을 사용

SELECT EMPLID 
    ,Z_SERV_DT_TYPE 
    ,MAX(SERVICE_DT) AS MAX_SERVICE_DT 
FROM PS_Z_ADD_EMP_SRVDT 
WHERE Z_SERV_DT_TYPE IN ('TED','SAD') 
GROUP BY EMPLID 
    ,Z_SERV_DT_TYPE 

EMPLIDZ_SERV_DT_TYPE 조합에 따라 당신에게에 최대 날짜를 제공해야한다고.

SELECT EMPLID 
    ,MAX(SERVICE_DT) AS MAX_SERVICE_DT 
FROM PS_Z_ADD_EMP_SRVDT 
WHERE Z_SERV_DT_TYPE IN ('TED','SAD') 
GROUP BY EMPLID 

또는 하위 쿼리 사용 :

SELECT EMPLID 
    ,Z_SERV_DT_TYPE 
    ,SERVICE_DT 
FROM PS_Z_ADD_EMP_SRVDT 
WHERE Z_SERV_DT_TYPE IN ('TED','SAD') 
    AND (EMPLID,SERVICE_DT) IN (
     SELECT EMPLID 
      ,MAX(SERVICE_DT) 
     FROM PS_Z_ADD_EMP_SRVDT 
     WHERE Z_SERV_DT_TYPE IN ('TED','SAD') 
    ) 

을 아니면 공상 얻고 싶었다 경우, OLAP 사용 당신은 다음 유형을 제거 할 수 중 어느 유형인지 맥스 날짜를 원하는 경우 함수 :

이 모든 것이 실시간으로 처리되므로 약간의 조정이 필요할 수 있지만이 방법에 대해 알아야합니다.

관련 문제