VBA(Excel)与SQL – 比较两行中的值(循环)

这是可能的SQL? 这似乎是一个简单的概念。 (我正在使用SQL Server 2005)

循环遍历SQL表中的所有行 – (这是我的vba excel脚本,但是与我一起)比较列m中的值,如果一行= 65,下一个等于120增加j,并在另一列(列q)

Sub InsertProductionCycle() Dim LR As Long Dim j As Integer j = 1 LR = Range("G" & Rows.Count).End(xlUp).Row For i = 1 To LR Step 1 Cells(i, "Q").Value = j If Cells(i, "M").Value = 65 And Cells(i + 1, "M").Value = 190 Then j = j + 1 End If Next i End Sub 

来自SQL专家的任何想法? 我可以在SQL中执行此操作吗? 我的想法是:也许循环是有点延伸,(我可以在SQL工作中运行),但你可以比较行,并插入j循环值在另一列。 那就是我卡住的地方。

-Andrea

这是一个有趣的! 可能有更有效的方法来做到这一点,但是你可以在一个基于集合的语句中完成,而不需要循环或游标。

假设一个表模拟你的数据看起来像这样( i基本上是你的行号):

 CREATE TABLE MyTable (i int, M int) 

我用自连接来匹配i行和i+1行,并使用COUNTQ列。

 ;WITH data AS ( SELECT ai, aM, bM as NextM , CASE WHEN aM = 65 AND bM = 190 THEN 1 ELSE 0 END AS shouldIncreaseQ FROM MyTable a LEFT OUTER JOIN MyTable b ON ai + 1 = bi ) SELECT data.M, data.NextM , (SELECT COUNT(*) + 1 FROM data AS ref WHERE ref.shouldIncreaseQ = 1 AND ref.i <= data.i) as Q FROM data 

如果需要的话,可以使用SELECT INTO将数据存入另一个表中以供将来使用。