我使用直接SQL查询作为我的SSRS报告的数据源:
SELECT
emp.EmployeeNumber, FirstName, LastName, MiddleName
, amts.AmountCode, amts.amt, amts.AmountType
from EmployeeMaster emp
LEFT OUTER JOIN
(
SELECT 'Earning' as AmountType, EmployeeNumber, EarningCode as AmountCode
, SUM(Amount) AS amt
FROM EmployeeEarnings GROUP BY EmployeeNumber, EarningCode
UNION ALL
SELECT 'Deduction', EmployeeID, DeductionID
, SUM(Amount) AS amt FROM EmployeeDeduction GROUP BY EmployeeID, DeductionId
) AS amts
ON emp.EmployeeNumber = amts.EmployeeNumber
此查询收集按员工编号,收入类型和扣除类型分组的每位员工的所有收入和扣除额。我不确定我是否可以在x ++或AOT查询中执行此操作。我想知道这样做是否可以,或者是否有替代方法可以产生像此查询一样的结果?我正在使用RDP类。
答案 0 :(得分:3)
AX不支持嵌套连接。
但是,您可以创建EmployeeEarnings
和EmployeeDeduction
的联合视图。
然后,您可以选择EmployeeMaster
和外部联接以获得相同的结果。
您的SQL不正确,因为它不考虑dataAreaId
和Partition
。
答案 1 :(得分:0)
是,AX不支持嵌套连接。是的,你可以看一看。您可以使用ResultSet
类通过sqlStatement
通过直接SQL查询获取SQLconnection
的结果。
前段时间我创建了一个包装类https://github.com/mazzy-ax/SysResultSet。仅对俄语的评论。抱歉。项目导入ax2012 https://github.com/mazzy-ax/SysResultSet/blob/ax2012/AOT/Classes/Class_SysResultSet.xpo
它简化了使用直接SQL查询的工作。如果你知道自己在做什么,试试吧。
而且,是的,您的SQL不正确,因为它不考虑dataAreaId
和Partition
。另外,您的SQL查询忽略Axapta XDS(记录级别安全性)和Axapta安全子系统。我认为AOT查询更充足。