在SQL中这可能吗?这似乎是一个简单的概念。(我正在使用SQL Server 2005)
循环遍历我的SQL表中的所有行,如果一行= 65,下一行等于120,则比较m列中的值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循环值插入另一列中。那就是我被困住的地方。
这是一个有趣的!可能有一种更有效的方法来执行此操作,但是您可以在单个基于集合的语句中执行此操作,而无需循环或游标。
假设一个用来模拟数据的表看起来像这样(i基本上是行号):
i
CREATE TABLE MyTable (i int, M int)
我使用自联接将i行与i+1行进行匹配,并使用aCOUNT来确定Q列。
i+1
COUNT
Q
;WITH data AS ( SELECT a.i, a.M, b.M as NextM , CASE WHEN a.M = 65 AND b.M = 190 THEN 1 ELSE 0 END AS shouldIncreaseQ FROM MyTable a LEFT OUTER JOIN MyTable b ON a.i + 1 = b.i ) 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将数据放入另一个表中以备将来使用。