如何使用PXSelectJoinOrderBy连接同一个表两次

Mur*_*nan 1 sql acumatica

我正在尝试使用PXSelectJoinOrderBy为以下SQL语句创建视图

SELECT * FROM INVENTORYITEM II
LEFT JOIN INItemXRef X1 ON II.InventoryID = X1.InventoryID AND 
X1.AlternateType = '0VPN' LEFT JOIN INItemXRef X2 ON II.InventoryID = X1.InventoryID AND
X2.AlternateType = '0CPN'
Run Code Online (Sandbox Code Playgroud)

我使用以下语句一次加入INItemXRef表,它工作正常.

public PXSelectJoinOrderBy<InventoryItem, LeftJoin<INItemXRef, On<INItemXRef.inventoryID, Equal<InventoryItem.inventoryID>>>, OrderBy<Asc<InventoryItem.inventoryCD>>> FilteredItems;
Run Code Online (Sandbox Code Playgroud)

如何使用不同的别名再次加入INItemXRef?

小智 6

您可以通过创建继承INItemXRef类并在bql查询中使用它们的类来获得所需的结果.

public PXSelectJoinOrderBy<InventoryItem,
    LeftJoin<VendorINItemXRef, 
        On<InventoryItem.inventoryID,
            Equal<VendorINItemXRef.inventoryID>,
            And<VendorINItemXRef.alternateType,
                Equal<string_0VPN>>>,
    LeftJoin<CustomerINItemXRef,
        On<InventoryItem.inventoryID,
            Equal<CustomerINItemXRef.inventoryID>,
            And<CustomerINItemXRef.alternateType,
                Equal<string_0CPN>>>>>,
    OrderBy<Asc<InventoryItem.inventoryCD>>> FilteredItems;

public class VendorINItemXRef : INItemXRef
{
    public new class inventoryID : IBqlField{}
    public new class alternateType : IBqlField{}
}

public class CustomerINItemXRef : INItemXRef
{
    public new class inventoryID : IBqlField { }
    public new class alternateType : IBqlField { }
}
Run Code Online (Sandbox Code Playgroud)

您还需要覆盖将用于比较的参数,以便系统可以绑定它们.

有关其他信息,您还可以检查此问题: Acumatica BQL查询多次使用同一个表.