解析涉及计算的多条记录

Posted

技术标签:

【中文标题】解析涉及计算的多条记录【英文标题】:Resolving multiple records where calculations are involved 【发布时间】:2014-08-05 12:35:11 【问题描述】:

我有一张发票表,其中偶尔的失误导致为某些记录创建了两张发票。这意味着我有大约 2000 条由两行组成的发票记录。我需要合并这些重复的记录

每一行都有以下信息:

一个关键字段:LINK 总计,减去增值税字段:ExVAT 增值税字段:VAT 类型字段:TYPE

我已经起草了一些伪​​代码,但我不太擅长 VB,所以它是在 C# 中的:

foreach Row record in TableName
   
    if (record1.TYPE == "priorfee", record2.TYPE == "priorfee")
      
         Row newRecord = new Row;
         newRecord.LINK = record1.LINK;
         newRecord.TYPE = record1.TYPE;

         newRecord.VAT = (record1.VAT + record2.VAT);
         newRecord.ExVAT = (record1.ExVAT + record2.ExVAT);

         record1 = Null;
         record2 = Null;
      
    else if (record1.TYPE == "subsequentfee", record2.TYPE == "subsequentfee")
      
         Row newRecord = new Row;
         newRecord.LINK = record1.LINK;
         newRecord.TYPE = record1.TYPE;

         newRecord.VAT = (record1.VAT + record2.VAT);
         newRecord.ExVAT = (record1.ExVAT + record2.ExVAT);

         record1 = Null;
         record2 = Null;
      
   

现在,我需要把它放到一个工作的 VB 脚本中,或者想办法把它作为一个 SQL 脚本来做(我不介意分两轮来做,每种类型一个)。

另外,哪个更可取?

【问题讨论】:

@zaitsman 我假设我只是使用 SQL 语句来查找多个记录,例如重复记录向导创建的记录。这就是我需要TYPE 定义的原因,因为有些记录同时具有priorfeesubsequentfee 条目。在这种情况下,我确实想要合并它们。我只想在存在多个相同type 的记录时合并。 @zaitsman 问题是,所有这些重复项都有相同的LINK 引用。重复的数量各不相同,并非所有记录都有重复。总共有 1,016 条记录具有一种类型和/或另一种类型的重复项,其中一些记录具有多个重复项。我可以将记录分成两个表(priorfeesubsfee),这样会简化流程吗?要回答您的问题,如果有 20 条 priorfee 类型的记录,则具有相同 LINK 引用的那些记录是重复的。 @zaitsman 还有,我指的是 MS-Access 中的一个向导,它创建一个 SQL 查询以根据一个或多个不同的列在特定表中定位重复项。 @zaitsman 在这种情况下,是的。理想情况下,我会更新它们,但这也意味着删除未更新的行,我认为在这种情况下这会使事情变得过于复杂。 @Shell 嗯...不是真的。我正在处理机密数据,有太多可识别信息。我很困惑你为什么需要它? 【参考方案1】:

好的,我写了我的第一个 Access 查询:P

根据您的要求,这将汇总所有发票增值税和 ExVAT,根据重复的 LINK 和 TYPE 获取第一个 LINK 和 TYPE,并在您的数据库中插入新行。

注意:这不会删除操作的行。这也不会影响没有重复的行。

INSERT INTO TableName ( TYPE, LINK, VAT, ExVAT )
SELECT TableName.TYPE, TableName.LINK, Sum(TableName.VAT) AS VAT, Sum(TableName.ExVAT) AS ExVAT
FROM TableName
WHERE (((TableName.TYPE)='subsequentfee'))
GROUP BY TableName.TYPE, TableName.LINK
HAVING (((Count(TableName.LINK))>1));

要在 priorfeesubsequentfee 之间切换,只需更新字符串变量(或复制粘贴两次查询)

【讨论】:

以上是关于解析涉及计算的多条记录的主要内容,如果未能解决你的问题,请参考以下文章

(建议收藏)计算机网络:应用层题目综合解析与拓展

EXCEL按一个值查询出多条记录,怎么处理?

选择一个记录作为列表并解析到视图

1004610053实操记录

HashMap源码解析

记录解析具有合并单元格的Excel