2014-07-10 85 views
0

我正在嘗試計數訂單和訂單行依賴於訂單類型。到目前爲止,我已經計算了每個訂單類型的訂單標題。Oracle SQL加入並計算

SELECT lifnr, 
    COUNT(CASE WHEN e1.bsart = 'NB' THEN 1 ELSE NULL END) Schedule_Orders, 
    COUNT(CASE WHEN e1.bsart = 'ZNBS' THEN 1 ELSE NULL END) Store_Orders, 
    COUNT(CASE WHEN e1.bsart = 'ZCSO' THEN 1 ELSE NULL END) Third_Party, 
    COUNT(CASE WHEN e1.bsart NOT IN ('ZCSO', 'NB', 'ZNBS') THEN 1 ELSE NULL END) Other_Orders, 
    COUNT(*) Total_Orders 
FROM saprpe.ekko e1 
JOIN saprpe.ekpo p1 
ON e1.ebeln = p1.ebeln 
WHERE e1.aedat BETWEEN '20130701' AND '20140701' 
GROUP BY lifnr 

訂單行存儲在表EKPO中,所以我已經使用文檔編號將EKKO加入EKPO。我如何去計算上述情況下每種訂單類型的訂單項次?我只設法計算所有訂單項次,並非針對每種訂單類型。

附加信息:訂單標題存儲在包含供應商,訂單號和訂單類型的EKKO中。 EKKO與包含訂單行的表EKPO具有一對多的關係。訂單行與通過訂單號的訂單表頭相關。 我想要做的是獲得三種訂單類型NB,ZNBS和ZCSO的總訂單標題,以及每種訂單類型的總行數。全部納入自己的列

例如,我想看看;

供應商1,10個NB訂單,100個NB訂單行,0 ZNBS訂單,0 ZNBS訂單行,5個ZCSO訂單,15 ZCSO訂單行,15個總的訂單,115總訂單行

請如果我指出需要澄清任何事情。我應該注意到我更喜歡這在單個SQL查詢中,我可以使用WHERE子句在每個訂單類型的單個查詢基礎上管理它。

+0

你能提供樣品數據和想要的結果嗎?我仍然不知道你的意思是什麼「我如何去計算上述情況下每種訂單類型的訂單項次?」 –

+0

是一個噩夢,試圖在這裏格式化一些示例數據!我將編輯內容以使其更清晰 – Dan

回答

0

經過一些試驗和錯誤,谷歌搜索等,我終於到了那裏。

SELECT 
    lifnr, 
    COUNT(DISTINCT (CASE WHEN e1.bsart = 'NB' THEN e1.ebeln ELSE NULL END)) Schedule_Orders, 
    COUNT(CASE WHEN e1.bsart = 'NB' THEN e1.ebeln ELSE NULL END) Schedule_Order_Lines, 
    COUNT(DISTINCT (CASE WHEN e1.bsart = 'ZNBS' THEN e1.ebeln ELSE NULL END)) Store_Orders, 
    COUNT(CASE WHEN e1.bsart = 'ZNBS' THEN e1.ebeln ELSE NULL END) Store_Order_Lines, 
    COUNT(DISTINCT (CASE WHEN e1.bsart = 'ZCSO' THEN e1.ebeln ELSE NULL END)) Third_Party, 
    COUNT(CASE WHEN e1.bsart = 'ZCSO' THEN e1.ebeln ELSE NULL END) Third_Party_Lines, 
    COUNT(DISTINCT (CASE WHEN e1.bsart NOT IN ('ZCSO', 'NB', 'ZNBS') THEN e1.ebeln ELSE NULL END)) Other_Orders, 
    COUNT(CASE WHEN e1.bsart NOT IN ('ZCSO', 'NB', 'ZNBS') THEN e1.ebeln ELSE NULL END) Other_Order_Lines, 
    COUNT(DISTINCT(e1.ebeln)) Total_Orders, 
    COUNT(e1.ebeln) Total_Order_Lines 
FROM saprpe.ekko e1 
LEFT JOIN saprpe.ekpo p1 
ON e1.ebeln = p1.ebeln 
WHERE e1.aedat BETWEEN '20130701' AND '20140701' 
GROUP BY lifnr 

聯接最初讓我的頭數相同數量的,因爲表之間的關係的線...添加到DISTINCT我的頭數和使用情況的線數使我能夠計數那些訂單類型。

+0

您可能需要查看「解碼」關鍵字。它可能會簡化你的一些情況 - 當陳述時。你不能總是替代它,但這看起來像是一個很好的例子。 – Hambone

+0

很感謝,我會檢查出來的! – Dan