Sql server 2012 如何在SQL中将多列数据向上移动几行?

Sql server 2012 如何在SQL中将多列数据向上移动几行?,sql-server-2012,row,shift,Sql Server 2012,Row,Shift,我有一个如下所示的查询,它在一个行块中循环,并向后移动一些列。某些列需要向后移动更多行。我在这个网站上找到了一种切换方法,但它只切换一个频道。我不关心起始值和结束值的覆盖。必须有一种更优雅、更有效的方法 改变的原因不是因为它重要,而是我正在对一些排放物进行采样,采样需要几秒钟才能通过采样线到达分析仪。为了修正我的排放量计算,我需要将样本浓度移回到实际提取的时刻。数据以1 Hz的频率存储,因此这种情况下的位移为6-7秒 DECLARE @RUNNUMBER int SET @RUNNUMBER =

我有一个如下所示的查询,它在一个行块中循环,并向后移动一些列。某些列需要向后移动更多行。我在这个网站上找到了一种切换方法,但它只切换一个频道。我不关心起始值和结束值的覆盖。必须有一种更优雅、更有效的方法

改变的原因不是因为它重要,而是我正在对一些排放物进行采样,采样需要几秒钟才能通过采样线到达分析仪。为了修正我的排放量计算,我需要将样本浓度移回到实际提取的时刻。数据以1 Hz的频率存储,因此这种情况下的位移为6-7秒

DECLARE @RUNNUMBER int
SET @RUNNUMBER = 2063

DECLARE @ROWCOUNT int
SET @ROWCOUNT = (SELECT COUNT(*) FROM DEERDAQData.dbo.B142C15 WHERE RunNumber = @RUNNUMBER AND CurrentMode > 0)

DECLARE @FIRSTROW int
SET @FIRSTROW = (SELECT MIN(RecID) FROM DEERDAQData.dbo.B142C15 WHERE RunNumber = @RUNNUMBER AND CurrentMode > 0)

DECLARE @DOCShift int
SET @DOCShift = 6

DECLARE @DPFShift int
SET @DPFShift = 7

DECLARE @SCRShift int
SET @SCRShift = 7

DECLARE @i int = @FIRSTROW
WHILE @i <= @FIRSTROW + @ROWCOUNT - 1 BEGIN
    UPDATE DEERDAQData.dbo.B142C15
        SET 
            [DOC Out Ammonia] = (SELECT [DOC Out Ammonia] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Carbon Dioxide High] = (SELECT [DOC Out Carbon Dioxide High] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Carbon Monoxide Low] = (SELECT [DOC Out Carbon Monoxide Low] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Carbon Monoxide High] = (SELECT [DOC Out Carbon Monoxide High] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Nitric Oxide] = (SELECT [DOC Out Nitric Oxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Nitrogen Dioxide] = (SELECT [DOC Out Nitrogen Dioxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Nitrous Oxide] = (SELECT [DOC Out Nitrous Oxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 
            [DOC Out Propene] = (SELECT [DOC Out Propene] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DOCShift), 

            [DPF Out Ammonia] = (SELECT [DPF Out Ammonia] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Carbon Dioxide High] = (SELECT [DPF Out Carbon Dioxide High] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Carbon Monoxide Low] = (SELECT [DPF Out Carbon Monoxide Low] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Carbon Monoxide High] = (SELECT [DPF Out Carbon Monoxide High] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Nitric Oxide] = (SELECT [DPF Out Nitric Oxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Nitrogen Dioxide] = (SELECT [DPF Out Nitrogen Dioxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Nitrous Oxide] = (SELECT [DPF Out Nitrous Oxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 
            [DPF Out Propene] = (SELECT [DPF Out Propene] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @DPFShift), 

            [SCR Out Ammonia]= (SELECT [SCR Out Ammonia] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Carbon Dioxide High] = (SELECT [SCR Out Carbon Dioxide High] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Carbon Monoxide Low] = (SELECT [SCR Out Carbon Monoxide Low] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Carbon Monoxide High] = (SELECT [SCR Out Carbon Monoxide High] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Nitric Oxide] = (SELECT [SCR Out Nitric Oxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Nitrogen Dioxide] = (SELECT [SCR Out Nitrogen Dioxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Nitrous Oxide] = (SELECT [SCR Out Nitrous Oxide] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift), 
            [SCR Out Propene] = (SELECT [SCR Out Propene] FROM DEERDAQData.dbo.B142C15 WHERE RecID = @i + @SCRShift)    
        WHERE RecID = @i
    SET @i = @i + 1
END
下面显示了它的外观。我需要在单个查询中对多个通道列执行此操作,其中每个通道可能向后移动不同的秒数行。Microsoft SQL Server是平台。我需要实际更改数据。我不只是想把它输出到某个临时表中


这有点混乱,可能需要添加一个表的before/after示例。您不能简单地用新数据添加新行吗?-请为您正在使用的特定数据库平台编辑并添加标记。根据我的经验,在SQL中使用循环总是错误的。你没有说你在使用什么平台,但我希望你想使用LAG或LEAD。看起来LEAD可能有效,但我如何实际修改数据,而不仅仅是选择数据?我第一次看到的所有超前/滞后示例都只是显示人们选择了一些数据。谢谢。这有点混乱,也许可以添加一个表的前/后示例。您不能简单地用新数据添加新行吗?-请为您正在使用的特定数据库平台编辑并添加标记。根据我的经验,在SQL中使用循环总是错误的。你没有说你在使用什么平台,但我希望你想使用LAG或LEAD。看起来LEAD可能有效,但我如何实际修改数据,而不仅仅是选择数据?我第一次看到的所有超前/滞后示例都只是显示人们选择了一些数据。非常感谢。