簡體   English   中英

將數據導出到CSV時重復記錄

[英]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個重復記錄。 有什么建議可以重建出口以避免重復記錄嗎?

您的聯接將產生“重復項”,例如,您通過inventLocationIdinventDim聯接可能會產生多個記錄,因此您為每個這些記錄“重復”一次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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM