按项

时间:2017-08-02 21:00:03

标签: sql oracle join ansi-sql

我需要帮助来构建一个ORACLE SQL查询,它可以为每个月的项目名称提供销售额。 以下是查询中需要的列 - 日期(月份),项目名称,销售数量,平均单价,净销售额,信用单位

  • 已售出数量

    项目的

    是该月特定项目的信用额后销售的净数量;那是 = SUM(发票项目。已售出数量) - SUM(贷项凭证项目。贷方数量)

  • 净销售额

    特定月份中的项目= SUM(发票项目总金额) - SUM(贷项凭证项目。贷方金额)

  • 信用单位 :它指的是在该月记入的项目总数(信用数量)

以下是表格:

发票项目(发票日期,发票ID,产品ID,料品名称,销售数量,总金额)

库存调整(日期,实体,EntityID,ItemID,商品名称,数量,单价,库存现货,净额) 当生成该项目的发票或贷方通知单时,此表包含项目的单价和数量。实体可以是“Invoice”或“CreditNote”。 EntityID是发票ID或CreditNotes ID

信用票据(CreditNote日期,CreditNotes ID,客户ID)

信用票据项目(CreditNotes ID,项目ID,项目名称,信用数量,信用额度) 注意:这是Credit Notes表的行项目表。 CreditNote Date在主表

中可用

到目前为止,我有这个问题,但我无法确定加入信用票据和信用票据项目并获得净销售额和销售数量的下一步。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

从您的查询和说明中,似乎invoice_id,product_id和日期对于发票项目来说是唯一的。

所以你需要对信用票据做同样的事情 - (从信用票据cn中选择cni。*,cn.CreditNote日期,信用票据项目cni,其中cni.CreditNotes ID = cn.CreditNotes ID)sub 然后通过相同的3列将此子查询连接到idr。

另外,您最好按IDR.itemname,IDR.itemid和IDR.date

进行分组

答案 1 :(得分: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";

希望它能帮到你)