0

これらのクエリの 1 つが機能し、もう 1 つが機能しないのはなぜですか? 私は作業クエリを作成し、テーブルを一時的に作成しました。一時テーブルを外側に配置するように書き直す必要があります。

これはテーブルのデータです:

tmpTASItemQtyInventDim:

|アイテム ID | InventDimId | 発明数量 |
|-------|--------------|-----------|
|73016 | 薄暗い 11542913 | 0 |

セールスライン:

|セールス ID |ライン番号 | アイテム 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 に答える