2017-08-02 99 views
0

我需要幫助來構建一個ORACLE SQL查詢,該查詢可以爲每個月給出按物料名稱銷售額。 下面是需要在查詢中的列 - 日期(月),產品名稱,數量銷售,平均單價,淨銷售額,信用單位按項目的SQL(Oracle)銷售查詢

  • 售出數量

    項目的

    是網在該月的特定項目的信用額度之後銷售的數量;這是 = SUM(發票項目銷售數量。) - SUM(信用票據項目的信貸數量。)

  • 淨銷售額

    項目的特定月份

    = SUM(發票金額Items.Total) - SUM(信用票據項目的信貸量。)

  • 信用單位 :它指的是那些在當月

下面是桌子被記項(貸款量)的總檯:

發票項目(發票日期,發票編號,產品編號,產品名稱,銷售數量,總金額)

庫存調整(日期,實體,ENTITYID,項ID,產品名稱,數量,單價,現有庫存,淨額) 該表包含生成該項目的發票或貸項通知時項目的單價和數量。實體可以是'發票'或'CreditNote'。 ENTITYID是發票ID或CreditNotes ID

信用票據(CreditNote日期,CreditNotes ID,客戶ID)

信用票據項目(CreditNotes ID,商品編號,商品名稱,信貸數量,信用證金額) 注意:這是Credit Notes表的行項目表。 CreditNote日期在主表中可用

到目前爲止,我有這個查詢,但我無法找出加入信用票據和信用票據項目並獲得銷售淨額和數量的下一步驟。

SELECT 
     inv_items."Invoice Date" inv_date, 
     inv_items."Product ID" inv_items_Prod_ID, 
     inv_items.Item Name, 
     AVG(IDR."Unit Price"), 
     SUM(inv_items."Quantity sold") total_Qty_Sold, 
     SUM(inv_items."Total Amount") inv_ItemsSale 
FROM "Invoice Items" inv_items 
JOIN "Inventory Adjustment" IDR ON IDR."EntityID" = inv_items."Invoice ID" 
    AND IDR."ItemID" = inv_items."Product ID" 
    AND IDR."Date" = inv_items."Invoice Date" 
GROUP BY 1, 
    2, 
    3 

任何幫助,非常感謝。

+0

如果您使用的是Oracle,你爲什麼要一個ANSI SQL查詢?您編寫的查詢不是ANSI兼容的。 –

+0

你說得對,我想在oracle中查詢。我很抱歉。我將編輯帖子。 – manshu116

+1

'group by 1,2,3''可以在其他數據庫產品中工作(我想我讀過它),但它在Oracle中不起作用。 '1,2,3的順序'起作用,但對於分組,您必須按名稱而不是數字來引用列。 – mathguy

回答

0

我根據你的問題需求準備了腳本,但是由於你的問題中的信息較少,例如列和它們的結構的數據類型,我不確定,你可以試着讓我知道代碼是確定的:

SELECT 
     to_char (inv_items."Invoice Date", 'MONTH') inv_month, 
     inv_items."Product ID" inv_items_Prod_ID, 
     inv_items."Item Name" inv_items_name, 
     AVG(IDR."Unit Price") avg_unit_price, 
     SUM(inv_items."Quantity sold") total_Qty_Sold, 
     SUM(inv_items."Total Amount") inv_ItemsSale, 
     (SUM(inv_items."Quantity sold") - SUM(cni."credit Quantity")) Quantity_Sold, 
     (SUM(inv_items."Total Amount") - SUM(cni."Credit Amount")) Credit_units 
FROM "Invoice Items" inv_items 
JOIN "Inventory Adjustment" IDR 
    ON IDR."EntityID" = inv_items."Invoice ID" 
    AND IDR."ItemID" = inv_items."Product ID" 
    AND IDR."Date" = inv_items."Invoice Date" 
JOIN "Credit Notes" cn 
    ON IDR."EntityID" = cn."CreditNotes ID" 
    AND IDR."Entity" = 'CreditNote' --- filtering by only 'CreditNote' 
JOIN "Credit Note Items" cni 
    ON cn."CreditNotes ID" = cni."CreditNotes ID" 
GROUP BY to_char (inv_items."Invoice Date", 'MONTH'), inv_items."Product ID", inv_items."Item Name"; 

希望它會幫助你)

+0

使用JOIN「Credit Notes」cn和JOIN「Credit Note Items」cni ON cn。「CreditNotes ID」= cni。「CreditNotes ID」僅返回信用項目而不是所有發票項目。所以我嘗試了LEFT JOIN。但是,結果似乎仍不匹配:( – manshu116

+0

原因我添加了過濾器(AND IDR。「Entity」='CreditNote'---僅通過'CreditNote'過濾),請嘗試刪除並再次運行 如果它將工作,然後不要忘記「請投票」和「設置綠色」的標誌爲答案)。 – Ikrom

+0

它工作。我加入「庫存調整」,左加入「信用票據」,並刪除過濾器「實體」=「CreditNote」。 – manshu116

0

在您的查詢和說明中,似乎invoice_id,product_id和日期 - 對於發票項目是唯一的。

所以你需要做相同的信用票據 - (選擇cni。*,cn.CreditNote日期從貸方票據cn,貸方票據項目cni其中cni.CreditNotes ID = cn.CreditNotes ID)sub 然後加入這個子查詢由相同的3列idr。

此外,你最好由IDR.itemname,IDR.itemid和IDR組。date