0

为什么其中一个查询有效而另一个查询无效?我编写了工作查询,然后将表设为临时表,并且必须对其进行重写以在外部放置临时表。

这是表中的数据:

tmpTASItemQtyInventDim:

|物品编号 | InventDimId | 库存数量 |
|-------|-------------|------------|
|73016 | 调暗 11542913 | 0 |

销售热线:

|销售编号 |行号 | 项目 ID | InventDimId | 销售数量 |
|------------|--------|--------|--------------|--- --------|
|SO120036796 | 1| 73016 | 调暗 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");

两者都应该输出Insufficient Qty,但第一个说Good Qty

4

2 回答 2

1

从记忆中,我认为您需要在第一张桌子上分组,请参阅 http://axatluegisdorf.blogspot.co.uk/2010/07/select-group-by-and-join-order-by.html

select firstonly ITEMID,InventDimId 
  FROM  tmpTASItemQtyInventDim
  GROUP BY ITEMID,InventDimId
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");
于 2012-11-14T08:23:27.140 回答
1

混合临时表和真实表就像在鹅卵石路上骑自行车。你并不总是得到你想得到的东西,而且性能有时很糟糕

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

另见Axaptapedia

于 2012-11-14T09:57:07.333 回答