2017-09-21 1 views
-5

Expected Result와 비슷한 샘플 레코드를 출력하려면 어떻게해야합니까?어떻게이 SQL 쿼리를 수행 할 수 있습니까?

샘플 데이터베이스

Table Sample1 
Column Status  Int 
Column dtDateTime dateTime 
Column User  varchar(50) 

기록

User  dtDateTime     Status 
User1 2017-05-19 08:00:00.000  1 
User1 2017-05-19 17:05:00.000  2 
User1 2017-05-20 09:05:00.000  1 
User1 2017-05-21 17:35:00.000  2 

열 상태에 대한 시간 제한 같은 시간-IN과 기록이 같은 기록 1

예상 결과

User   WORK-DATE  Time-IN   Time-OUT  Status 
user1  2017-05-19  08:00:00.000 17:05:00.000 COMPLETE 
User1  2017-05-20  09:05:00.000 NULL   NO OUT 
User1  2017-05-21  NULL   17:35:00.000 NO IN 
+1

당신이 예상 결과에 샘플 데이터에서 가져 오는 방법을 설명 할 수 이전에 수정 구슬이 시간 열을 표시하지 않았다?를 – Squirrel

+1

기대 결과의 상태를 결정하는 논리는 무엇입니까 ?? 당신은 당신의 질문을 정교하게 다듬을 필요가 있습니다. –

+0

나는 1이 클락 인 것으로 가정하고 2는 클럭 아웃이다. 그러나 이것에 대해 더 많은 설명이 필요하다. – Kyle

답변

2

내 수정 구슬이 쿼리를 제안 :

SELECT User, 
     CONVERT(DATE, dtDateTime) AS [WORK-DATE], 
     CASE WHEN MIN(STATUS) <> MAX(STATUS) THEN 'COMPLETE' 
       WHEN MAX(STATUS) = 1 THEN 'NO OUT' 
       WHEN MIN(STATUS) = 2 THEN 'NO IN' 
       END   
FROM  Sample1 
GROUP BY User, CONVERT(DATE, dtDateTime) 

편집 :

SELECT User, 
     CONVERT(DATE, dtDateTime) AS [WORK-DATE], 
     MAX(CASE WHEN STATUS = 1 THEN CONVERT(TIME, dtDateTime) END) AS [TIME-IN], 
     MAX(CASE WHEN STATUS = 2 THEN CONVERT(TIME, dtDateTime) END) AS [TIME-OUT], 
     CASE WHEN MIN(STATUS) <> MAX(STATUS) THEN 'COMPLETE' 
       WHEN MAX(STATUS) = 1 THEN 'NO OUT' 
       WHEN MIN(STATUS) = 2 THEN 'NO IN' 
       END AS Status   
FROM  Sample1 
GROUP BY User, CONVERT(DATE, dtDateTime) 
+0

도움 주셔서 감사합니다. –

+0

귀하의 수정 구슬이 실제로 작동합니다 : D –

+1

당신은 도움이되는 다람쥐입니다. 그러나이 플랫폼에는 사람들이 다시 그렇게하도록 권장하지 않으면 서 자유로운 노동에 대한 뻔뻔한 요구가 있다는 것을 고려해 볼 가치가 있습니다. 나는 사전 노력의 갈가리 찢음이없는 곳에 질문에 대답하지 말 것을 조언 할 것이다. – halfer

관련 문제