2013-06-04 21 views
0

我想輸出以下數據,每個位置只有一行。現在,它表明: 120 .... 120 ... 120 ...關於SQL Distinct從句

我試着去得到它了總結所有的值到一行120,一行123,一行128,等等。我覺得這是與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 
+1

我已經刪除了MySQL標記,因爲它與更特定的SQL Server 2008相矛盾。 –

+0

你能發佈你的結果嗎?您目前應該在'GROUP BY'中爲每個字段接收不同的記錄。 – sgeddes

回答

1

大肆削減你的GROUP BY秒。首先是ITEMMAST.ITEM,然後是ICLOCATION.LOCATION。無論是切換訂單還是擺脫ITEM

另外,您可能希望通過在WHERE語句中使用IN運算符來清理它。即

ICLOCATION.LOCATION IN ('120', '123', '128', '129', 'HD41D', 'HD21H', 'HD91H') 
+0

IN上的良好通話。就GROUP BY而言,我應該如何處理?如果我取出ITEMMAST.ITEM,它不起作用,因爲它不在聚合函數或GROUP BY子句中 –

+0

如果將它從「GROUP BY」中取出,還必須將其從選擇列表中刪除。如果您仔細考慮它是有道理的 - 因爲它不是分組的一部分,所以每個組可能有多個值。 – Chad

+0

我把ITEM拿出來了,但是我的位置數字還沒有分組。 –