当前位置: 首页 > 面试题库 >

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

霍建柏
2023-03-14
问题内容

在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行进行匹配,并使用aCOUNT来确定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将数据放入另一个表中以备将来使用。



 类似资料:
  • 问题内容: 我正在使用sqlite数据库。我的表架构是 表中的内容是这样的: 我使用以下sql语句选择名称及其按名称和dt分组的相应分数总和。 我有 现在,我想扩展查询,以便sql语句可以搜索其分数总和在不同时间(dt)不变的内容。在这种情况下,输出应为: 如何编写这样的sql? 问题答案: 这可以通过自我(反)联接来实现:

  • 这是一个Java代码,应该测试小数点后的前三位是否相同。而我需要编写这个程序没有一个主方法。

  • 问题内容: 我需要查询一个表并选择4列的值中的3个。我需要比较第三列和第四列的值,然后选择较大的值。 例如: 我需要退货: 我一直在尝试使用IF / ELSE,但是我似乎无法正确使用语法 问题答案: 在T-SQL中, IF 命令用于程序控制。例如: 在SQL语句中,您需要 CASE 。

  • 问题内容: 下面的每个示例…从解析的JSON字符串遍历对象将返回错误“对象不支持此属性或方法”。谁能建议如何进行这项工作?非常感谢(我花了6个小时在这里问一个答案)。 将JSON字符串解析为对象的函数(可以正常运行)。 循环遍历已解析的对象将返回错误“对象不支持此属性或方法”。 PS。我已经研究了这些库: - VBA的JSON无法获得的例子工作。 - VBJSON有没有包括VBA脚本(这可能工作,

  • 我尝试在特定工作表中循环包含数据的单元格,然后将该行中的每个单元格打印到文件中。 这是我的代码,但打印行的语法有误。我不明白这是什么问题。我正试图为包含数据的每一行打印A列中的内容。

  • 我们知道,在数学中有很多用于比较大小的运算符。 在 JavaScript 中,它们的编写方式如下: 大于 / 小于:a > b,a < b。 大于等于 / 小于等于:a >= b,a <= b。 检查两个值的相等:a == b,请注意双等号 == 表示相等性检查,而单等号 a = b 表示赋值。 检查两个值不相等。不相等在数学中的符号是 ≠,但在 JavaScript 中写成 a != b。 在本