我有以下兩條SQL語句,它們在某些行上返回的總和是雙倍的,並且希望有一些幫助排序。oracle sql join在某些行上SUM結果加倍
SELECT *
FROM (
SELECT A.ITMCOD
,I.ITMDSC
,A.CTLGRP
,SUM(A.CASQTY) thesum
,(C.FIFODT + I.STPSHP) STOP_SHIP_DATE
FROM INVENT_VIEW A
INNER JOIN ITMMST I ON A.ITMCOD = I.ITMCOD
INNER JOIN CTLGRP C ON A.CTLGRP = C.CTLGRP
WHERE A.ITMCOD LIKE 'PS%687%'
GROUP BY A.ITMCOD
,I.ITMDSC
,A.CTLGRP
,C.FIFODT
,I.STPSHP
)
ORDER BY ITMCOD
我的第二個試驗中,在那裏我以爲聯接是問題,並返回相同的結果如下:
SELECT INVENT_VIEW.ITMCOD
,ITMMST.ITMDSC
,CTLGRP.CTLGRP
,SUM(INVENT_VIEW.CASQTY) thesum
,(CTLGRP.FIFODT + ITMMST.STPSHP) STOP_SHIP_DATE
FROM INVENT_VIEW
,CTLGRP
,ITMMST
WHERE ITMMST.ITMCOD = INVENT_VIEW.ITMCOD
AND (CTLGRP.CTLGRP = INVENT_VIEW.CTLGRP)
AND (INVENT_VIEW.ITMCOD LIKE 'PS%687%')
GROUP BY INVENT_VIEW.ITMCOD
,ITMMST.ITMDSC
,CTLGRP.CTLGRP
,CTLGRP.FIFODT
,ITMMST.STPSHP
結果
╔════════════╦════════════════╦══════════════╦══════════╦══════════════════╗
║ "ITMCOD" ║ "ITMDSC" ║ "CTLGRP" ║ "THESUM" ║ "STOP_SHIP_DATE" ║
╠════════════╬════════════════╬══════════════╬══════════╬══════════════════╣
║ "PS00687A" ║ "gROOVY BRUSH" ║ "4066ZDPOO4" ║ 93600 ║ 26-DEC-16 ║
║ "PS00687A" ║ "gROOVY BRUSH" ║ "5385POSOO4" ║ 3600 ║ 08-MAY-18 ║
║ "PS00687A" ║ "gROOVY BRUSH" ║ "5299POS001" ║ 9922 ║ 08-MAY-18 ║
╚════════════╩════════════════╩══════════════╩══════════╩══════════════════╝
的錯誤是在第一行,其中總和應該是顯示的一半(46800)。另外兩個結果是正確的。
我已經試過在總結後放置DISTINCT,但是這只是返回第一行3600的第一個值。我也在SELECT語句之後放置了不同的右鍵,但這沒什麼區別。
真的很感謝這方面的幫助。
謝謝。
UPDATE
多虧了MEF誰是對的連接表一式兩份,我能得到我想要的結果!我還編輯了SQL這樣:
SELECT *
FROM (
SELECT A.ITMCOD
,I.ITMDSC
,A.CTLGRP
,SUM(A.CASQTY) QTY
,CASE
WHEN C.STPDAT IS NOT NULL
THEN C.STPDAT
ELSE (C.FIFODT + I.STPSHP)
END AS STOP_SHIP_DATE
FROM INVENT_VIEW A
INNER JOIN ITMMST I ON A.ITMCOD = I.ITMCOD
INNER JOIN CTLGRP C ON (
(A.CTLGRP = C.CTLGRP)
AND (A.ITMCOD = C.ITMCOD) <- added
)
WHERE A.ITMCOD LIKE 'PS%'
AND C.QASTAT = 'RL' <- added
GROUP BY A.ITMCOD
,I.ITMDSC
,A.CTLGRP
,C.FIFODT
,I.STPSHP
,C.STPDAT
)
ORDER BY ITMCOD
給我們你的數據結構和輸入,它很難看到這樣的問題。我認爲你可能有重複的行,這就是爲什麼你得到X2 – sagi
你需要提供所有涉及的表的樣本數據,以及你提供的輸出。你有沒有嘗試運行查詢沒有總和/組?這樣,你應該能夠看到行重複的位置;我的猜測是,至少有一個連接是1對多,而不是1對1,這意味着您的輸出最終可能會比您期望的行數多。 – Boneist
你有一個重複行(使用數據明智)是你的任何表。這就是爲什麼它的總和翻倍。 – Viplock