0

各場所に1行のみで次のデータを出力しようとしています。現在、次のように表示されています: 120.... 120... 120...

すべての値を合計して、120 の場合は 1 行、123 の場合は 1 行、128 の場合は 1 行などにしようとしています。これは DISTINCT 句と関係があると思いますが、これを見てちょっと頭がおかしくなりました...

SELECT ICLOCATION.LOCATION,
       ICLOCATION.NAME,
       ITEMMAST.ITEM,
       ITEMMAST.DESCRIPTION,
       ITEMLOC.SOH_QTY,
       OnOrder,
       AllocQty,
       SUM(ITEMLOC.SOH_QTY + t.OnOrder - t.AllocQty) AS NetOnHand
FROM   (SELECT ITEMLOC.ITEM,
               SUM(ISNULL(ITEMLOC.ONORDER_QTY, 0) + ITEMLOC.INTRANS_QTY + ITEMLOC.WIP_QTY)                                 AS OnOrder,
               SUM(ITEMLOC.ALLOC_QTY + ITEMLOC.UNALLOC_QTY + ITEMLOC.BACKORD_QTY + ITEMLOC.IN_PROC_QTY + ITEMLOC.HOLD_QTY) AS AllocQty
        FROM   ITEMLOC
        GROUP  BY ITEMLOC.ITEM) t
       INNER JOIN ITEMLOC
         ON ITEMLOC.ITEM = t.ITEM
       INNER JOIN ITEMMAST
         ON ITEMLOC.ITEM = ITEMMAST.ITEM
       INNER JOIN ICLOCATION
         ON ITEMLOC.COMPANY = ICLOCATION.COMPANY
WHERE  ( ICLOCATION.LOCATION = '120'
          OR ICLOCATION.LOCATION = '123'
          OR ICLOCATION.LOCATION = '128'
          OR ICLOCATION.LOCATION = '129'
          OR ICLOCATION.LOCATION = 'HD41D'
          OR ICLOCATION.LOCATION = 'HD21H'
          OR ICLOCATION.LOCATION = 'HD91H' )
       AND ITEMMAST.ITEM = '0210950'
GROUP  BY ITEMMAST.ITEM,
          ICLOCATION.LOCATION,
          ICLOCATION.NAME,
          ITEMMAST.DESCRIPTION,
          ITEMLOC.SOH_QTY,
          ITEMLOC.ITEM,
          OnOrder,
          AllocQty
ORDER  BY ICLOCATION.LOCATION,
          ITEMMAST.ITEM 
4

1 に答える 1

1

あなたのsを減らしますGROUP BY。最初に でグループ化しITEMMAST.ITEM、次に でグループ化しICLOCATION.LOCATIONます。順序を入れ替えるか、削除してITEMください。

また、無関係ですが、WHERE ステートメントで IN 演算子を使用して、少しクリーンアップすることもできます。すなわち

ICLOCATION.LOCATION IN ('120', '123', '128', '129', 'HD41D', 'HD21H', 'HD91H')
于 2013-06-04T16:43:13.473 に答える