如何使用 PXSelectJoinOrderBy 加入相同的 table 两次

How to join same table twice using PXSelectJoinOrderBy

我正在尝试使用 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'

我已经使用以下语句加入 INItemXRef table 一次并且工作正常。

public PXSelectJoinOrderBy<InventoryItem, LeftJoin<INItemXRef, On<INItemXRef.inventoryID, Equal<InventoryItem.inventoryID>>>, OrderBy<Asc<InventoryItem.inventoryCD>>> FilteredItems;

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

您可以通过创建 2 个 class 继承 class 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 { }
}

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

有关其他信息,您还可以查看此问题: .