我创建了一个将数据导出到CSV文件的方法,我创建了以下代码:
public void export()
{
permission = new FileIOPermission(fileNameValue, #io_WRITE);
permission.assert();
inFile = new CommaTextIo(fileNameValue, #io_WRITE);
inFile.inFieldDelimiter(";");
inFile.inRecordDelimiter("\n");
while (inFile.status() == IO_Status::Ok)
while select inventTrans
where inventTrans.StatusIssue == StatusIssue::ReservPhysical
join inventDim
where inventDim.InventLocationId == inventLocationId
join inventTransOrg
where inventTransOrg.RecId == inventTrans.InventTransOrg
{
con = conNull();
con = conIns(con, 1, inventTransOrg.inventTransId);
con = conIns(con, 2, inventLocationId);
con = conIns(con, 3, inventTrans.Qty);
inFile.writeExp(con);
}
}
这将创建一个包含3列的CSV文件,但是很多双记录(几乎100)实际数据不包含100个双记录。有什么建议我如何重建导出以避免双重记录?
答案 0 :(得分:4)
你的联接会产生重复的'例如,您通过inventDim
结果inventLocationId
加入inventTrans
结果,可能会有多条记录,因此您InventDim
重复了InventDimId
每个记录一次
重新评估您的查询以解决您的问题;您可能想要更改的一件事是通过infolog
链接到1.3.6.RELEASE
。
您的问题与CSV导出代码无关,因为您可以轻松查看是否将CSV文件操作替换为RestTemplate
的输出。
答案 1 :(得分:1)
错误在于您没有将Inventdim表与任何其他表联系起来。所以它会导致交叉连接。因此,请更改您的while语句以包含该语句。我的建议是添加字段列表,因为InventTrans将有很多字段,并且为了获得更好的性能,建议为select语句提供字段列表。 您也可以尝试使用以下声明。
While select inventTransId from inventTransOrg
join Qty from inventTrans
where inventTrans.InventTransOrg = inventTransOrg.RecId
join inventLocationId from inventDim
where inventDim.InventDimId == inventTrans.InventDimId
&& inventDim.InventLocationId == inventLocationId