2017-11-30 3 views
0

あるテーブルから別のテーブルにいくつかの列を移動しようとしていますが、その間に別のテーブルに挿入する前に日付と時刻をdatetime列に変換します。そのためには、ストアドプロシージャを使用して条件を適用しています。しかし、私はそのような状態を適用することはできません。私の使っているテーブルは以下の通りです。私は日のために別々の時間や日付などの日時を変換する必要がありSQL Serverのストアドプロシージャを使用してselectステートメントに挿入

dbo.Attendance

Id          UserId         Status CheckIn    CheckOut   Date 
--------------------------------------------------------------------------------------------------------------------------------------------- 
0083c28b-249e-4072-b6ac-822d7e4d2d35 5e397451-362f-4e1f-b257-0406fd8da3f8 Late 09:04:00.0000000 00:00:00.0000000 2017-01-16 
0146da5c-0eae-4b4f-b9e6-2b5bffb34235 b3e0dc55-f738-478f-87ff-f52dae1f662a Late 09:33:00.0000000 00:00:00.0000000 2017-01-24 
023903d9-b6be-40fa-828e-83bee1748864 5e397451-362f-4e1f-b257-0406fd8da3f8 Full Day 08:45:00.0000000 00:00:00.0000000 2017-02-20 
043030e5-fcc2-4409-b804-25fd5cce6a90 366c3918-8569-46ef-aa6c-d95e941bd255 Full Day 09:00:00.0000000 00:00:00.0000000 2017-03-13 
05a15650-04c5-49f2-9476-046e15c4d917 b3e0dc55-f738-478f-87ff-f52dae1f662a Late 09:13:00.0000000 00:00:00.0000000 2017-01-10 
09f41fb0-6060-432f-91b6-c53be457f415 b3e0dc55-f738-478f-87ff-f52dae1f662a Late 09:01:00.0000000 00:00:00.0000000 2017-01-21 

dbo.UserActivity

DateTime     UserId 
---------------------------------------------------------------- 
2017-01-16 17:41:23.670 8c2d617b-8361-432a-9f19-0c70f81764fa 
2017-01-31 08:59:22.093 3f8fc164-92e9-4714-a42c-8ae8a2f923a9 
2016-09-30 11:41:41.100 da42b0f4-7d0b-4b68-ad81-12bea670c218 
2017-01-20 14:19:10.613 8c2d617b-8361-432a-9f19-0c70f81764fa 
2017-02-09 17:28:39.373 ac0ce1ad-f021-4fab-ab5e-9bbd48004a4b 

クエリ

CREATE PROCEDURE abc1(@id uniqueidentifier) 
AS 
BEGIN 
    DECLARE 

    INSERT INTO dbo.Attendence (Id, UserId, Date, CheckIn, CheckOut) 
     SELECT 
      Id = @id, UserId, Datetime AS dt, 
      DateTime AS chkin, DateTime AS chkout 
     FROM 
      dbo.UserActivity 
END 

、チェックインユーザーアクティビティテーブルからの出席テーブルのチェックアウト列と、AttendenceテーブルのIDをチェックアウトしますか?

答えて

1

この手順で使用できます。

INSERT INTO dbo.Attendence(Id,UserId, Date, CheckIn, CheckOut) 
SELECT 
    NEWID() AS Id 
    , UserId 
    , CAST([DateTime] AS DATE) as dt 
    , CAST([DateTime] AS TIME) as chkin 
    , CAST([DateTime] AS TIME) as chkout 
FROM dbo.UserActivity UA 
WHERE NOT EXISTS 
    (SELECT * FROM dbo.Attendence A 
     WHERE A.UserId = UA.UserId 
      AND A.Date = CAST(UA.[DateTime] AS DATE) 
      AND A.CheckIn = CAST(UA.[DateTime] AS TIME) 
      AND A.CheckOut = CAST(UA.[DateTime] AS TIME)) 
+0

ここで、idはnewId()として宣言する必要がありますか? – user100020

+0

あなたは 'NEWID()AS Id'のように追加することができます –

+0

すべての行に同じIDを使用するか、各行に一意のIDを使用しますか? –

0

これは使用できます。

SELECT Id=NEWID(), 
     UserId, 
     SELECT CAST(CONVERT(VARCHAR(10),DateTime,111) AS DATE) AS dt, 
     SELECT CONVERT(VARCHAR(12), DateTime, 108) AS chkin, 
     SELECT CONVERT(VARCHAR(12), DateTime, 108) AS chkout, 
FROM dbo.UserActivity 
関連する問題