Dynamics Ax X++中select statement对于多表字段交替排序的实现

在SQL中我们常常会碰到这样的多个表字段交替出进行排序的方式:
select * from A join B on A.key=b.refkey order by A.key, B.value, A.value
这里先安装A.key进行排序,然后是B.value,接着是A.value。
然而Dynamics AX中X++语法并没有对这种在SQL中很简单的排序实现提供支持。
那么我们应该如何实现这种多表交替排序呢?
举例说明,定义两个表,这里PK是T1的主键,T2的外键,T1-T2就是1-1对应关系。
T1 (PK,A1,A2)
T2 (PK,B1)
T1的数据:
1 1 1
2 2 2
3 1 2
4 1 1
T2的数据:
1 b
2 a
3 a
4 a

先看下面3个case温习一下:
Case 1: 不指定排序——T1 join T2是默认按T1主键排序的,运行以下X++ select语句:
while select T1 join T2 where T1.PK==T2.PK
{ print T1.PK," ",T1.A1," ",T1.A2," ",T2.B1; }
得到:
PK A1 A2 B1
1  1  1  b
2  2  2  a
3  1  2  a
4  1  1  a

Case 2: 按照T1.A1排序,
  select T1 order by A1
  join T2 where T1.PK==T2.PK
结果:
PK A1 A2 B1
1  1  1  b
3  1  2  a
4  1  1  a
2  2  2  a

Case 3: 按T1.A1, T2.B1排序
  select T1 order by A1
  join T2 order by B1
  where T1.PK==T2.PK
结果:
PK A1 A2 B1
3  1  2  a
4  1  1  a
1  1  1  b
2  2  2  a
****比对Case 2与3,可看到区别,这里Case 3就是先按照主表排序再按照从表排序。


Case1-3都是常用的排序方式。下面给出Case 4
Case 4: 按T1.A1, T2.B1, T1.A2的顺序排序,其结果应该是:
PK A1 A2 B1
4  1  1  a
3  1  2  a
1  1  1  b
2  2  2  a

为了实现这个排序,我们需要声明两个T1表变量,使用下面的代码实现:
T1 t11,t12;
T2 t2;
;
while select t11 order by A1
join t2 order by B1
where t11.PK == t2.PK
join t12 order by A2  //T1 join T1
where t11.PK == t12.PK
{ print T11.PK," ",T11.A1," ",T12.A2," ",T2.B1; }
这里采用了一种变相的实现方式。性能上,多出来的一次T1 join T1的操作,因为是根据主键关联,所以性能损耗较小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值