首页 文章

SQL(Oracle)按项目查询销售额

提问于
浏览
0

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

  • 已售出数量

项目是指当月特定项目的信用额后销售的净数量;即= SUM(发票项目 . 已售出数量) - SUM(贷项通知项目 . 贷方数量)

  • 净销售额

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

  • 贷方单位:指在该月记入的项目(贷方数量)的总单位

以下是表格:

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

Inventory Adjustment (日期,实体,实体ID,项目ID,项目名称,数量,单价,现有库存,净金额)此表保存生成该项目的发票或贷方通知单时项目的单价和数量 . 实体可以是'Invoice'或'CreditNote' . EntityID是Invoice ID或CreditNotes ID

Credit Notes (CreditNote Date,CreditNotes ID,Customer ID)

Credit Note Items (CreditNotes ID,Item ID,Item Name,credit quantity,Credit Amount)注意:这是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

    我根据您的问题要求准备了脚本,但由于您的问题中的信息较少,例如列的数据类型及其结构,我不确定,您可以尝试让我知道代码是否正常:

    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

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

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

    您最好按IDR.itemname,IDR.itemid和IDR.date进行分组

相关问题