游标与 While 循环 - SQL Server

2024-03-15

假设我在数据库(本例中为 SQL Server 2008)中有一堆可用于创建方程的行。

 -----------------------------------------------------
 OperationID | EquationID | Operation | Amount | Order
 -----------------------------------------------------
     1       |     1      |     +     |   12   |  1 
     2       |     1      |     +     |   12   |  2 
     3       |     2      |     /     |   2    |  3 
     4       |     2      |     +     |   12   |  1 
     5       |     2      |     -     |   2    |  2 
 -----------------------------------------------------

我需要想出一种方法来评估该表中的方程。

公式 1:12 + 12 = 24
公式 2:(12 - 2)/2 = 5

我想不出一种方法可以在不迭代行的情况下获得这些结果。我知道如何做到这一点的唯一方法是使用游标或通过使用临时表和 while 循环。有没有更好的方法来做到这一点?如果不是,通常什么会执行更好的游标或 while 循环?

注意:这有点简化,在项目的这个阶段,我们只能猜测数据会是什么样子。假设每个“方程”大约有 100 到 1000 次运算,并且每天有几千个“方程”需要处理。


事实证明,在得出运行总计方面,递归 CTE 的性能优于循环。这实际上只是一个变量运算符的运行总计,因此性能优势应该适用于此。

创建行为类似于循环的递归 CTE 的方法如下:

        ;WITH cte AS (
        SELECT equation, number, order FROM table WHERE order = 1
        UNION ALL
        SELECT table.equation, 
            CASE WHEN table.operation = '+' THEN cte.number + table.number
                 WHEN table.operation = '-' THEN cte.number - table.number END AS number, --etc.
table.order FROM table INNER JOIN cte ON table.order = cte.order + 1 AND table.equation = cte.equation
        )
    SELECT equation, number, order 
    FROM cte
    OPTION (MAXRECURSION 1000);

第一个 SELECT 获取最左边的数字,UNION all 对它返回的数字执行以下操作。 maxrecursion 选项将一个方程中的运算次数限制为 1000。当然,您可以将其设置得更高。

这个答案有些不完整,因为最终的选择查询将返回中间结果。不过,过滤起来相当简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游标与 While 循环 - SQL Server 的相关文章

  • PDO::PARAM_FLOAT 不存在,为什么?

    我想知道为什么 PDO PARAM FLOAT 不存在以及什么可以替代它 没有 可能是由于隐含的舍入问题 只需使用PDO PARAM STR并使用将浮点数转换为字符串strval float or string float
  • SQL Server 到 er 模型

    是否有程序可以将 SQL Server 数据库图表转换为 er 模型 或者从 SQL Server 服务器创建数据库的 er 模型 在 SQL Server 中 Management Studio 中的每个数据库都有 数据库图 功能 您可以
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • SQL:将一个表中的所有记录插入到另一表中,而不指定列

    我想将备份表 foo bk 中的所有记录插入到 foot 表中 而不指定特定的列 如果我尝试这个查询 INSERT INTO foo SELECT FROM foo bk 我会收到错误 插入错误 列名称或提供的值的数量与表定义不匹配 是否可
  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null
  • 仅当所有记录都匹配时 SQL 连接

    我有3张桌子 CP carthead idOrder CP cartrows idOrder idCartRow CP shipping idCartRow idShipping dateShipped 每个 idOrder 可以有多个 i
  • 为什么涉及用户变量的表达式的求值顺序未定义?

    From MySQL手册 http dev mysql com doc refman 5 7 en user variables html以下查询的输出不保证始终相同 SET a 0 SELECT a AS first a a 1 AS s
  • Azure COSMOS DB 如何查询数组中的内容

    如何进行查询以获取文档数组 roles 中包含某些内容的文档 我想获取以下文档 其中 Trainer 是数组中的元素 enabled true profilePicture null roles Trainer Client SELECT
  • SQL 事务如何工作?

    我从事 SQL 工作的时间并不长 但我想我明白 通过将 SQL 语句包装在事务中 所有语句都会完成 或者都不会完成 这是我的问题 我有一个包含 lineitem 集合的订单对象 行项目在 order OrderId 上相关 我已经证实所有
  • 显式与隐式 SQL 连接

    显式内连接与隐式内连接之间有效率差异吗 例如 SELECT FROM table a INNER JOIN table b ON a id b id vs SELECT a b FROM table a table b WHERE a id
  • 有很多数据库视图可以吗?

    我很少 每月 每季度 使用 Microsoft SQL Server 2005 数据库视图生成数百份 Crystal Reports 报告 在我不读取这些视图的所有时间里 这些视图是否会浪费 CPU 周期和 RAM 因为我很少从视图中读取数
  • 如何识别 SQL Azure 中的死锁?

    我有一个由两个实例组成的 Windows Azure 角色 有时交易会失败并显示SqlException与以下文字 事务 进程 ID N 在锁资源上与另一个进程发生死锁 并被选为死锁牺牲品 重新运行事务 现在我已经谷歌搜索了一段时间并阅读这
  • 将错误保存到 MySQL 数据库

    我有一个 php 查询来更新 MySQL 数据库 请参见下文 sql update hr payroll set payroll number payroll number tax code tax bacs ref bacs ref pa
  • T-SQL 中是否有 LIKE 语句的替代方案?

    我有一个场景我需要执行以下操作 SELECT FROM dbo MyTable WHERE Url LIKE
  • 按每月时间为用户标记标签

    数据源 User ID Visit Date 1 2020 01 01 12 29 15 1 2020 01 02 12 30 11 1 2020 04 01 12 31 01 2 2020 05 01 12 31 14 Problem 我
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • 字符串文字上的 SQL Server T-SQL N 前缀[重复]

    这个问题在这里已经有答案了 这可能是一个菜鸟问题 但我发现了一些 T SQL 查询示例来验证数据库大小SELECT and WHERE clause here http technet microsoft com en us library
  • 对带有空白 NVARCHAR 或 NULL 检查的 VARCHAR 索引进行 Count(*) 会导致返回的行数加倍

    我有一张桌子 上面有VARCHAR列及其上的索引 每当一个SELECT COUNT 是在这张表上完成的 该表检查了COLUMN N OR COLUMN IS NULL它返回双倍的行数 SELECT 与相同的where子句将返回正确的记录数
  • 表达与空列表相同的 IN 条件的可移植方式是什么?

    例如 工作于sqllite3 select from orders where custid and status in 但它失败了postgres ksysdb select code applicable objecttype from

随机推荐

  • 通过 Wi-Fi 运行/安装/调试 Android 应用程序?

    我认为有一种方法可以通过 Wi Fi 测试开发中的应用程序 这可能吗 我希望能够摆脱手机的束缚并进行无线开发 参见论坛帖子 通过USB连接设备并确保调试正常 adb tcpip 5555 这使得设备开始侦听端口 5555 上的连接 查找设备
  • Google Drive API 应用程序数据从网络浏览器访问凭据(Javascript)

    我正在尝试从 Google Console 获取凭据 以通过以下方式访问我的应用程序驱动器数据Web browser Javascript 选项 以便稍后使用 Picker API 但是当我选择选项应用程序数据 访问属于您自己的应用程序的数
  • 我可以自动发送短信吗(无需用户批准)

    我对 Android 还很陌生 我正在尝试从 Android 应用程序发送短信 使用 SMS Intent 时 SMS 窗口将打开 用户需要批准 SMS 并发送 有没有办法无需用户确认就自动发送短信 谢谢 利奥尔 您可以使用此方法发送短信
  • cv2.imshow() 在线程中调用时启动但不弹出窗口

    cv2 imshow 在线程中调用时不会弹出窗口 docker中出现了python3的图标 但没有窗口 没有绘图 另外 我需要半双工通信的功能 因此我不能只删除线程 如何正确显示螺纹内的图片 任何回应表示赞赏 背景 MacOS Catali
  • Flash Builder 中的 TODO 任务列表

    Flash Builder 支持任务列表吗 我正在测试 PHP 的 Flash Builder 我可以在 PHP 代码中看到我的 TODO 但在 AS 或 MXML 中看不到 我找到了这个插件 http www richinternet d
  • 创建数据模型的最佳实践[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于当前的项目 我正在创建一个数据模型 是否有任何来源可以找到良好数据模型的 最佳实践 好的意味着灵活
  • REST 服务的最佳用途是什么?

    我知道像 Facebook 这样的网站现在正在使用 REST 服务 但我想知道其他使用 REST 的应用程序 以及是否存在特定情况下使用 REST 比其他方法更合理 REST 与 CRUD 数据服务无关 是的 您可以使用 REST 来执行类
  • 有没有办法在 PHP 中追溯创建基于时间/节点的 UUID?

    大多数基于时间 类型 1 的 UUID 是使用当前时间创建的 我正在将 MySQL 数据库迁移到 cassandra 并希望为存档项目创建基于时间的 UUID 有人可以提供一个如何使用过去的时间段创建 1 类 UUID 的示例吗 所有 uu
  • 如何发现我创建的物化视图的基础查询?

    我在 Postgres 9 3 中创建了一个物化视图 但此后我丢失了创建它的底层 SELECT 查询 我想删除物化视图 重写查询以包含更多数据 然后创建一个同名但具有新基础查询的物化视图 Just SELECT pg get viewdef
  • 创建键绑定以运行上一个或最后一个 shell 命令

    我经常想快速重新运行我使用的最后一个 shell 命令 我知道您可以将焦点转移到终端 向上箭头并输入 但我认为一定有比这三个步骤更好的方法 The sendSequencevscode 中的命令变得越来越强大 因此我寻找一种方法来创建一个可
  • 有没有一种简单的方法可以将 vulture 与 django 一起使用?

    我正在尝试清理 django 中一些混乱的遗留代码 Vulture http pypi python org pypi vulture看起来是一个不错的选择 但它似乎不知道如何查找 urls py 引用的视图函数 这并不奇怪 因为大多数函数
  • HTML 中的 valign 与 text-align

    我无法通过以下代码找出 HTML 中 valign 与 text align 之间的区别 table width 500 border 0 tr td style background color FFA500 h1 Main Title
  • 在解组操作期间将 nil="true" 转换为 null

    我从服务器接收 XML 该服务器的架构将几乎每个元素指定为
  • Java:jsr166y Phaser 的教程/说明

    这个问题 https stackoverflow com questions 1148125 resources on the upcoming fork join framework两年前被问到 但它提到的资源要么不是很有帮助 恕我直言
  • kivy 应用程序内的一个简单网页作为小部件

    我想在 ubuntu 64 位上运行的 kivy 应用程序中有一个 Web 视图 我查看了网络 浏览了 kivy 的文档并在 StackOverflow 上搜索答案 但我找不到任何可以完成我的工作的东西 一个简单的网页需要在 kivy 应用
  • 可以检测元素的样式是否只是浏览器默认样式还是由样式表或内联样式设置吗?

    我的 javascript 包含在 X 的网站中 但我对她的网站或她包含它的位置没有任何其他控制权 如果她的造型 element 我想不管它 但如果她没有 我有一个样式表 我会注入 有什么办法可以检测她是否有造型吗 检查它的高度是 0 还是
  • 如何用Go实现BitSet?

    我在Go中没有找到BitSet包 所以我尝试实现它 我想使用 uint64 数组来存储这些位 我需要分配 uint64 数组的位数 使用 Java 我可以定义一个采用整数的构造函数 虽然 Go 不提供构造函数 但我如何正确初始化 当用户调用
  • 交换 css 字体时是否会发出 js 事件?

    我可以判断字体何时已成功 或以其他方式 加载 然后使用 JS 进行操作吗 Context 我正在使用 playwright 打印一系列文档 我目前正在加载这些字体https fonts googleapis com css2 family
  • 理解 Java 中抽象类的用途

    假设我有两个类 A和B A类被定义为抽象类 而B类扩展了这个抽象类 最后我测试结果 这两个类都是同一个包的一部分 public abstract class A protected abstract void method1 protect
  • 游标与 While 循环 - SQL Server

    假设我在数据库 本例中为 SQL Server 2008 中有一堆可用于创建方程的行 OperationID EquationID Operation Amount Order 1 1 12 1 2 1 12 2 3 2 2