[英]Double records when exporting data to CSV
我創建了一種將數據導出到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個重復記錄。 有什么建議可以重建出口以避免重復記錄嗎?
您的聯接將產生“重復項”,例如,您通過inventLocationId
與inventDim
聯接可能會產生多個記錄,因此您為每個這些記錄“重復”一次inventTrans
。
重新評估您的查詢以解決您的問題; 你可能想改變的一件事是鏈接到InventDim
通過InventDimId
。
您的問題與CSV導出代碼無關,因為您可以輕松查看是否將CSV文件操作替換為infolog
的輸出。
錯誤是您沒有將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.