2016-11-09 54 views
2

我關注2個表AUF_KOPF是訂單標題,而AUF_POS是訂購商品。如何在Oracle SQL中執行復雜的MAX()和GROUP BY?

我想獲得產品在訂單中的訂單項目上使用的最長日期。產品ID存儲在AUF_POS.GLAS1,AUF_POS.GLAS2AUF_POS.GLAS3中。

我已經創建該查詢僅檢查AUF_POS.GLAS1

Select Max(AUF_KOPF.ERFASS_DAT), 
    AUF_POS.GLAS1 
From AUF_KOPF AUF_KOPF 
    Inner Join AUF_POS AUF_POS On AUF_KOPF.AUF_NR = AUF_POS.AUF_NR 
Group By AUF_POS.GLAS1 
Order By AUF_POS.GLAS1 

結果:

MAX(AUF_KOPF.ERFASS_DAT) GLAS1 
07/11/2016 1 
06/11/2016 2 
03/11/2016 3 
09/11/2016 4 
07/11/2016 5 

問題是,產品ID 1可能已經比07/11/2016最近的順序使用在另一個位置AUF_POS.GLAS2AUF_POS.GLAS3

是否有可能做OR,或者什麼是寫這個最好的方法?我想遠離3 SELECT,然後合併它們,因爲看起來很雜亂。

AUF_KOPF行:

AUF_NR ERFASS_DAT 
1609183 06/01/2016 
1609184 06/01/2016 
1609185 06/01/2016 
1609187 06/01/2016 
1609188 06/01/2016 

AUF_POS行:

AUF_NR AUF_POS GLAS1 GLAS2 GLAS3 
1609183 4 4 9 0 
1609184 5 4 9 0 
1609185 6 4 9 0 
1609187 7 4 9 0 
1609188 8 4 9 0 

在這種情況下所需的輸出將顯示所有產品爲06/01/2016,但更多的數據會顯示最新的日期,在任何位置,即使用產品ID。

回答

2

您可以使用UNION ALL不應過度複雜化(除了較長的代碼)

Select Max(AUF_KOPF.ERFASS_DAT), 
     AUF_POS.GLAS 
From AUF_KOPF 
    Inner Join (SELECT AUF_NR,GLAS1 as glas FROM AUF_POS UNION ALL 
       SELECT AUF_NR,GLAS2   FROM AUF_POS UNION ALL 
       SELECT AUF_NR,GLAS3   FROM AUF_POS) AUF_POS 
    On AUF_KOPF.AUF_NR = AUF_POS.AUF_NR 
Group By AUF_POS.GLAS 
Order By AUF_POS.GLAS 
+0

@mathguy這不是一個錯字,對於加入它的必要。 – sagi

+0

呃 - 對不起,你是對的。我不知道我在想什麼! (其實我是這樣做的,我以爲你會像原來那樣使用合格的名字......但是仍然) – mathguy

+0

沒關係,這些名稱導致混淆,colums,別名和表都被調用相同的名稱,即使我迷失在自己的代碼中:P @mathguy – sagi