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

标签 sql excel sql-server-2005 vba for-loop

这在 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 基本上是您的行号):

CREATE TABLE MyTable (i int, M int)

我使用自连接将 i 行与 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将数据放入另一个表中以供将来使用。

关于sql - VBA (Excel) 与 SQL - 比较两行中的值(循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420983/

相关文章:

java - 结果集未打开。验证自动提交是否关闭。 Apache 德布里

mysql - ALTER TABLE 问题

MySQL 按自定义模式排序

excel - 如何通过vba找出excel中整行是否为空白

Excel 简单公式仅适用于筛选结果

php - 使用 PHP 将 Excel 数据从特定行和列解析到 MySQL

sql - 如何将表架构和约束复制到不同数据库的表?

sql-server-2005 - 如何在 where 子句中调用存储过程

database - 标识列中的重复值

sql - 在 firebird 中使用计算的上位索引来比较不区分大小写的字符串