从临时表

时间:2017-03-17 03:49:03

标签: sql sql-server

我很困惑如何将声明的表中的值插入到选定的表中。我使用除了防止插入第一个副本,但我想插入副本的第二行。

Storage of the table 如何将第二个值放在上表中? Temporary table 我在这里实现的目的是在主表中插入第二个值来操作是time_mode值。

这是我的查询

INSERT INTO temp_time(SwipeID,tdate,ttime,time_mode,raw_data,[Shift],eid,machineip)
    SELECT a.SwipeID,a.tdate,a.ttime,a.time_mode,a.raw_data,1, eid FROM @temp_time
    EXCEPT
    SELECT SwipeID,tdate,ttime,time_mode,raw_data,Shift,eid,machineip from temp_time

从上面的查询中,只插入了一个值。我的客户改变了主意,他们希望反映出重复的值。更改time_mode上的值可以由我制作的系统更改。如果我使用不带except值的insert再次使用查询,那么主表会有3行导致问题,因为我想要反映的只是2行。

2 个答案:

答案 0 :(得分:1)

我想我终于正确地理解了你的问题。假设您已经运行了第一个查询,在第二个表中插入了没有重复项的数据,现在您想要插入其余的原始重复项。

在这种情况下,您可以通过消除已插入的先前行来执行此操作:

WITH dupes AS (
    SELECT *, ROW_NUMBER() OVER(
            PARTITION BY SwipeID, tdate, ttime, time_mode, raw_data,[Shift], eid, machineip
            ORDER BY (SELECT(0))
        ) AS row_num
    FROM SourceTable
)
INSERT INTO DestinationTable (/*columns*/)
SELECT /*values you need*/
FROM dupes
WHERE row_num > 1;

答案 1 :(得分:0)

假设您正在使用MYSQL;

INSERT INTO your_first_table(SwipeID,tdate,ttime,time_mode,raw_data,shift,eid,machineip)
    SELECT a.SwipeID,a.tdate,a.ttime,a.time_mode,a.raw_data,1,a.eid,a.machineip FROM your_second_table a ORDER BY a.SwipeID DESC LIMIT 1, 1