Acumatica 如何为复杂查询聚合BQL中的字段
我有一个连接三个表的BQL查询,如下所示:Acumatica 如何为复杂查询聚合BQL中的字段,acumatica,Acumatica,我有一个连接三个表的BQL查询,如下所示: foreach (PXResult<GLTran, Branch, xTACOpenSourceDetail> rec in PXSelectJoin<GLTran, InnerJoin<Branch,
foreach (PXResult<GLTran, Branch, xTACOpenSourceDetail> rec in
PXSelectJoin<GLTran,
InnerJoin<Branch,
On<GLTran.branchID, Equal<Branch.branchID>>,
InnerJoin<xTACOpenSourceDetail,
On<Branch.branchCD, Equal<xTACOpenSourceDetail.string03>,
And<xTACOpenSourceDetail.openSourceName, Equal<Constants.openSourceName>,
And<xTACOpenSourceDetail.dataID, Equal<Constants.privateer>>>>>>,
Where<Branch.branchCD, NotEqual<Required<Branch.branchCD>>,
And<GLTran.posted, Equal<True>,
And<GLTran.ledgerID, Equal<Required<GLTran.ledgerID>>,
And<GLTran.tranDate, GreaterEqual<Required<GLTran.tranDate>>>>>>,
OrderBy<Asc<xTACOpenSourceDetail.string01, Asc<GLTran.batchNbr>>>>.Select(Base, osdBranch.String03, ledger.LedgerID, tacsmlm.Date01))
SELECT SUM(GLTran.CuryDebitAmt) OVER (PARTITION BY GLTran.BatchNbr, Branch.BranchCD) as 'BatchTotal'
,GLTran.*
,Branch.*
,xTACOpenSourceDetail.*
FROM GLTran
Inner Join Branch
On GLTran.branchID = Branch.branchID
AND Branch.CompanyID = GLTran.CompanyID
Inner Join xTACOpenSourceDetail
On Branch.branchCD = xTACOpenSourceDetail.string03
And xTACOpenSourceDetail.openSourceName = 'TAC FM Map Company Branch'
And xTACOpenSourceDetail.dataID = 'Privateer'
AND xTACOpenSourceDetail.CompanyID = GLTran.CompanyID
Where Branch.branchCD <> '000 0000'
And GLTran.posted = 1
And GLTran.ledgerID = 6
And GLTran.tranDate >= '08/03/2017'
AND GLTran.CompanyID = 2
Order
By xTACOpenSourceDetail.string01 ASC
,GLTran.batchNbr ASC
foreach(PXResult rec in
PXSelectJoin.Select(Base、osdBranch.String03、ledger.LedgerID、tacsmlm.Date01))
我想添加一个聚合字段,即GLTran.BatNbr和Branch.BranchCD分组的GLTran.CuryDebitAmt之和
我可以在SQL中使用“求和覆盖”功能轻松实现这一点,如下所示:
foreach (PXResult<GLTran, Branch, xTACOpenSourceDetail> rec in
PXSelectJoin<GLTran,
InnerJoin<Branch,
On<GLTran.branchID, Equal<Branch.branchID>>,
InnerJoin<xTACOpenSourceDetail,
On<Branch.branchCD, Equal<xTACOpenSourceDetail.string03>,
And<xTACOpenSourceDetail.openSourceName, Equal<Constants.openSourceName>,
And<xTACOpenSourceDetail.dataID, Equal<Constants.privateer>>>>>>,
Where<Branch.branchCD, NotEqual<Required<Branch.branchCD>>,
And<GLTran.posted, Equal<True>,
And<GLTran.ledgerID, Equal<Required<GLTran.ledgerID>>,
And<GLTran.tranDate, GreaterEqual<Required<GLTran.tranDate>>>>>>,
OrderBy<Asc<xTACOpenSourceDetail.string01, Asc<GLTran.batchNbr>>>>.Select(Base, osdBranch.String03, ledger.LedgerID, tacsmlm.Date01))
SELECT SUM(GLTran.CuryDebitAmt) OVER (PARTITION BY GLTran.BatchNbr, Branch.BranchCD) as 'BatchTotal'
,GLTran.*
,Branch.*
,xTACOpenSourceDetail.*
FROM GLTran
Inner Join Branch
On GLTran.branchID = Branch.branchID
AND Branch.CompanyID = GLTran.CompanyID
Inner Join xTACOpenSourceDetail
On Branch.branchCD = xTACOpenSourceDetail.string03
And xTACOpenSourceDetail.openSourceName = 'TAC FM Map Company Branch'
And xTACOpenSourceDetail.dataID = 'Privateer'
AND xTACOpenSourceDetail.CompanyID = GLTran.CompanyID
Where Branch.branchCD <> '000 0000'
And GLTran.posted = 1
And GLTran.ledgerID = 6
And GLTran.tranDate >= '08/03/2017'
AND GLTran.CompanyID = 2
Order
By xTACOpenSourceDetail.string01 ASC
,GLTran.batchNbr ASC
在(按GLTran.BatchNbr、Branch.BranchCD划分)上选择SUM(GLTran.CuryDebitAmt)作为“BatchTotal”
,GLTran*
,分行*
,xTACOpenSourceDetail*
来自GLTran
内连接分支
在GLTran.branchID=Branch.branchID上
和Branch.CompanyID=GLTran.CompanyID
内部连接xTACOpenSourceDetail
在Branch.branchCD=xTACOpenSourceDetail.string03上
和xTACOpenSourceDetail.openSourceName='TAC FM Map Company Branch'
和xTACOpenSourceDetail.dataID='Privateer'
和xTACOpenSourceDetail.CompanyID=GLTran.CompanyID
其中Branch.branchCD'000 0000'
和GLTran.posted=1
和GLTran.ledgerID=6
和GLTran.tranDate>=“2017年3月8日”
和GLTran.CompanyID=2
命令
由xTACOpenSourceDetail.string01 ASC提供
,GLTran.batchNbr ASC
…但我不知道如何在BQL中添加此单个求和字段。非常感谢您的帮助。您将使用
PXSelectGroupBy
并在BQL的Aggreate中指示哪些字段将“求和”其值。任何未调用的字段都将是最大值
如果您在Acumatica源代码中搜索SUM
。选择(this,adj.AdjdOrderType,adj.AdjdOrderNbr,adj.AdjgDocType,adj.AdjgRefNbr);
您的问题的另一个替代解决方案是创建一个
PXProjection
,它可以是组值的总和,然后您可以在常规选择中包括BQL中的投影表和基表。我不知道与一个或另一个相比的性能优势-只是另一个选项。您将使用PXSelectGroupBy
并在BQL的Aggreate中指示哪些字段将“求和”其值。任何未调用的字段都将是最大值
如果您在Acumatica源代码中搜索SUM
。选择(this,adj.AdjdOrderType,adj.AdjdOrderNbr,adj.AdjgDocType,adj.AdjgRefNbr);
您的问题的另一个替代解决方案是创建一个
PXProjection
,它可以是组值的总和,然后您可以在常规选择中包括BQL中的投影表和基表。我不知道这两者相比的性能优势——只是另一种选择。谢谢,布伦丹;布伦丹·汉克斯;D