如何在sql中将行从一个临时表插入另一个临时表

时间:2017-03-08 11:31:56

标签: sql sql-server stored-procedures temp-tables

    ID  LogDate      LogTime           InoutMode    
    1   2017-02-23  19:30:00.0000000    1   
    2   2017-02-23  20:00:00.0000000    0   
    3   2017-02-23  20:30:00.0000000    1   
    4   2017-02-23  21:00:00.0000000    0   
    5   2017-02-23  21:30:00.0000000    1   
    6   2017-02-24  08:00:00.0000000    0   

上面的结果来自临时表。现在我想将LogTime插入另一个临时表,如下所示。

      InOutMode-1 =>InTime
      InOutMode-0 =>OutTime

     InTime            OutTime
   19:30:00.0000000   20:00:00.0000000
   20:30:00.0000000   21:00:00.0000000
   21:30:00.0000000   08:00:00.0000000

3 个答案:

答案 0 :(得分:1)

要将一个表的行插入另一个表,您可以编写此SQL查询:

INSERT INTO anotherTemp (InTime)
    SELECT LogTime
    FROM Temp
    WHERE InoutMode = 1  

INSERT INTO anotherTemp (OutTime)
    SELECT LogTime
    FROM Temp
    WHERE InoutMode = 0 

请参阅此链接了解更多http://www.dofactory.com/sql/insert-into

答案 1 :(得分:0)

使用INSERT INTO .. SELECT FROM构建

insert into #temp2
select ID, LogDate, 
case when InoutMode = 1 then LogTime end as InTime, 
case when InoutMode = 0 then LogTime end as OutTime,
InoutMode    
from #temp1

答案 2 :(得分:0)

使用2个cte,一个用于InoutMode 1,另一个用于0,还可以根据Id列或日期和时间列的顺序给出行号。然后加入这2个cte's。

<强>查询

;with cte as(
    select [rn] = row_number() over(
        order by [Id] -- also order by [LogDate], [LogTime]
    ), *
    from #your_temp_table_name
    where [InoutMode] = 1
),
cte2 as(
    select [rn] = row_number() over(
        order by [Id] -- also order by [LogDate], [LogTime]
    ), *
    from #your_temp_table_name
    where [InoutMode] = 0
)
select 
    t1.[LogTime] [InTime],
    t2.[LogTime] [OutTime]
from cte t1
left join cte2 t2
on t1.[rn] = t2.[rn];

如果您希望将结果集放入新的临时表中。然后最后一部分可以修改为

select 
    t1.[LogTime] [InTime],
    t2.[LogTime] [OutTime] 
into #your_new_temp_table_name
from cte t1
left join cte2 t2
on t1.[rn] = t2.[rn];

<强> Find demo here