解决涉及计算的多个记录

时间:2014-08-05 12:35:11

标签: c# sql vb.net ms-access ms-access-2010

我有一张发票表,偶尔发生的故障导致为某些记录创建了两张发票。这意味着我有两千行发票记录。我需要合并这些重复的记录

每一行都包含以下信息:

  • 关键字段: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脚本(我不介意在两个轮次中执行它们,每种类型一个)。

另外,哪个更合适?

1 个答案:

答案 0 :(得分:1)

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

根据您的要求,这将包括所有发票增值税和ExVATs,取第一个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));

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