Axapta 在查询中混合临时表和实表

Axapta 在查询中混合临时表和实表,axapta,dynamics-ax-2009,x++,Axapta,Dynamics Ax 2009,X++,为什么这些查询中的一个有效,而另一个无效?我编写了工作查询,然后将表设为临时表,必须重写该表才能使临时表位于外部 这是表中的数据: tmpTASItemQtyInventDim: |ItemId | InventDimId | InventQty | |-------|--------------|-----------| |73016 | Dim 11542913 | 0 | |Sales Id |Line No | ItemId | InventDimId | S

为什么这些查询中的一个有效,而另一个无效?我编写了工作查询,然后将表设为临时表,必须重写该表才能使临时表位于外部

这是表中的数据:

tmpTASItemQtyInventDim:

|ItemId | InventDimId | InventQty | |-------|--------------|-----------| |73016 | Dim 11542913 | 0 | |Sales Id |Line No | ItemId | InventDimId | SalesQty | |------------|--------|--------|--------------|-----------| |SO120036796 | 1| 73016 | Dim 11542913 | 2 |
select firstonly tmpTASItemQtyInventDim
    join itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId == 'SO120036796'  &&
          tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
          tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
          tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (tmpTASItemQtyInventDim.ItemId)
    info("Insufficient Qty");
else
    info("Good qty");
select firstonly itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId     == 'SO120036796'
    exists join tmpTASItemQtyInventDim
        where tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
              tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
              tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (salesLine.ItemId)
    info("Insufficient Qty");
else
    info("Good Qty");
|ItemId | InventDimId | InventQty| |-------|--------------|-----------| |73016 |尺寸11542913 | 0| 销售线:

|ItemId | InventDimId | InventQty | |-------|--------------|-----------| |73016 | Dim 11542913 | 0 | |Sales Id |Line No | ItemId | InventDimId | SalesQty | |------------|--------|--------|--------------|-----------| |SO120036796 | 1| 73016 | Dim 11542913 | 2 |
select firstonly tmpTASItemQtyInventDim
    join itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId == 'SO120036796'  &&
          tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
          tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
          tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (tmpTASItemQtyInventDim.ItemId)
    info("Insufficient Qty");
else
    info("Good qty");
select firstonly itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId     == 'SO120036796'
    exists join tmpTASItemQtyInventDim
        where tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
              tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
              tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (salesLine.ItemId)
    info("Insufficient Qty");
else
    info("Good Qty");
|销售标识|行号|项目标识|库存|销售数量| |------------|--------|--------|--------------|-----------| |SO120036796 | 1 | 73016 |尺寸11542913 | 2| 不起作用:

|ItemId | InventDimId | InventQty | |-------|--------------|-----------| |73016 | Dim 11542913 | 0 | |Sales Id |Line No | ItemId | InventDimId | SalesQty | |------------|--------|--------|--------------|-----------| |SO120036796 | 1| 73016 | Dim 11542913 | 2 |
select firstonly tmpTASItemQtyInventDim
    join itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId == 'SO120036796'  &&
          tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
          tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
          tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (tmpTASItemQtyInventDim.ItemId)
    info("Insufficient Qty");
else
    info("Good qty");
select firstonly itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId     == 'SO120036796'
    exists join tmpTASItemQtyInventDim
        where tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
              tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
              tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (salesLine.ItemId)
    info("Insufficient Qty");
else
    info("Good Qty");
仅选择第一个tmpTASItemQtyInventDim
从salesLine连接itemId、InventDimId、sum(salesQty)
按项目ID、InventDimId分组
其中salesLine.SalesId=='SO120036796'&&
tmpTASItemQtyInventDim.ItemId==salesLine.ItemId&&
tmpTASItemQtyInventDim.InventDimId==salesLine.InventDimId&&
tmpTASItemQtyInventDim.InventQty
有效:

|ItemId | InventDimId | InventQty | |-------|--------------|-----------| |73016 | Dim 11542913 | 0 | |Sales Id |Line No | ItemId | InventDimId | SalesQty | |------------|--------|--------|--------------|-----------| |SO120036796 | 1| 73016 | Dim 11542913 | 2 |
select firstonly tmpTASItemQtyInventDim
    join itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId == 'SO120036796'  &&
          tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
          tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
          tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (tmpTASItemQtyInventDim.ItemId)
    info("Insufficient Qty");
else
    info("Good qty");
select firstonly itemId, InventDimId, sum(salesQty) from salesLine
    group by itemId, InventDimId
    where salesLine.SalesId     == 'SO120036796'
    exists join tmpTASItemQtyInventDim
        where tmpTASItemQtyInventDim.ItemId == salesLine.ItemId     &&
              tmpTASItemQtyInventDim.InventDimId    == salesLine.InventDimId    &&
              tmpTASItemQtyInventDim.InventQty      < salesLine.SalesQty;

if (salesLine.ItemId)
    info("Insufficient Qty");
else
    info("Good Qty");
从salesLine中选择firstonly itemId、InventDimId、sum(salesQty)
按项目ID、InventDimId分组
其中salesLine.SalesId=='SO120036796'
存在加入tmpTASItemQtyInventDim
其中,tmpTASItemQtyInventDim.ItemId==salesLine.ItemId&&
tmpTASItemQtyInventDim.InventDimId==salesLine.InventDimId&&
tmpTASItemQtyInventDim.InventQty

两者都应该输出
不足的数量
,但第一个从内存中说
好的数量

,我认为您也需要在第一个表上分组 看见

选择firstonly项目ID,InventDimId
从tmpTASItemQtyInventDim
按项目ID、InventDimId分组
join itemId、InventDimId、sum(salesQty)
来自销售线
按项目ID、InventDimId分组
其中salesLine.SalesId=='SO120036796'&&
tmpTASItemQtyInventDim.ItemId==salesLine.ItemId&&
tmpTASItemQtyInventDim.InventDimId==salesLine.InventDimId&&
tmpTASItemQtyInventDim.InventQty
混合临时表和真实表就像在鹅卵石路上骑自行车。你并不总是得到你认为你得到的东西,而且

在AX 2012中,您可以使用工作更可预测的TempDB


另请参见。

非常有趣的帖子。有时我应该使用trace parcer,并真正检查我的查询成本,我认为。太棒了!不完全理解为什么我需要这样做,但它是有效的。我认为这是因为没有group by的查询相当于
code
Select SalesLine.ItemId,TmptSiteMQTyInventDim的SalesLine.InventDimId从TmptSiteMQTyInventDim.ItemId==SalesLine.ItemId和TmptSiteMQTyInventDim.InventDimId==SalesLine.InventDimId…..
code
如果“您的不工作是”测试SalesLine.ItemId,它认为会产生正确的结果