首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS 2000 --如何有效地遍历一组以前的记录并分组处理它们。大桌子

MS 2000 --如何有效地遍历一组以前的记录并分组处理它们。大桌子
EN

Stack Overflow用户
提问于 2011-02-21 17:22:50
回答 3查看 472关注 0票数 0

我想咨询一件事。我在DB有桌子。它有2列,如下所示:

Name...bilance

Jane...+3

简.-5

简.0

简.-8

简,-2

保罗.-1

保罗.2

保罗.

保罗.1

..。

我必须遍历这个表,如果我发现记录具有不同的“名称”(与前一行相比),我将处理所有带有前一个"name“的行。(如果我踩到第一个Paul行,就会处理所有Jane行)

处理过程如下:

现在我只和简的唱片一起工作,一个接一个地浏览它们。在每一张唱片上,我都会停下来,把它和先前所有的简行逐一比较。

任务是在实际人员的范围内,如果他们有不同的标志,就把他们的“胆小”列命名为“虚张声势”。

摘要:

我并行地遍历这个表的三个级别(嵌套循环)

1级=搜索"name“列的更改

2级=如果发现更改,获取所有带有先前“名称”的行,然后遍历它们

第3层=在每一行上停止并遍历前面所有具有当前“名称”的行

可以只使用游标和抓取来解决这个问题,还是有一些更平滑的解决方案?

我的真正的表有30000行和1500人,如果我用PHP进行逻辑操作,它需要很长的时间和超时时间。因此,我想重写它到MS 2000 (不允许其他DB )。游标是快速解决方案还是使用其他东西更好?

谢谢你的意见。

更新:

关于我的“总结”有很多问题。问题比我解释的要难一些。我简化了它,只是为了描述我的算法。

表的每一行都包含更多的列。最重要的是月份。这就是为什么每个人都有更多的行。每个月都是不同的月份。

“双语”指的是“加班”和“加班时间”。我需要用前几个月的值来中和它们。我想要尽可能多的零。所有的表都必须保持原样,只有两倍必须改为零。

示例:

行(Jane -5)将用行(Jane +3)进行总结。而不是3,我将得到0,而不是-5,我将得到-2。因为我用这个-5来减少+3。

下一行(简0)不会受到影响

下一行(Jane -8)不能使用,因为前面的所有两段都是负值。

等。

EN

回答 3

Stack Overflow用户

发布于 2011-02-21 17:26:26

可以使用单个SQL语句对每个名称的所有值进行求和:

代码语言:javascript
复制
select
    name,
    sum(bilance) as bilance_sum
from
    my_table
group by
    name
order by
    name
票数 0
EN

Stack Overflow用户

发布于 2011-02-21 17:27:31

从表面上看,这听起来应该是你想做的事:

代码语言:javascript
复制
select Name, sum(bilance)
from table
group by Name
order by Name

如果不是,您可能需要详细说明名称是如何排序的,以及您所说的“汇总”指的是什么。

票数 0
EN

Stack Overflow用户

发布于 2011-02-21 17:28:36

我不知道你这句话是什么意思.“任务是在实际人员的范围内,如果他们有不同的标志,就把”胆小“一栏标出。

但是,可以按查询使用组来获取所需的大量内容。

代码语言:javascript
复制
select name, case when bilance < 0 then 'negative' when bilance >= 0 then 'positive', count(*)
from table
group by name, bilance

这可能不是case语句的完美语法,但它应该会使您非常接近。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5069103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档