我有一张发票表,偶尔发生的故障导致为某些记录创建了两张发票。这意味着我有两千行发票记录。我需要合并这些重复的记录
每一行都包含以下信息:
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脚本(我不介意在两个轮次中执行它们,每种类型一个)。
另外,哪个更合适?
答案 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 之间切换,只需更新字符串变量(或复制粘贴查询两次)