2017-09-21 9 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とレコード2のようにレコード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) 

EDIT:クリスタルボールは、TIME列以前

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