【问题标题】:use Aggregate function with multiple table in Access在 Access 中对多个表使用聚合函数
【发布时间】:2013-05-19 09:20:34
【问题描述】:

我有四个表 Items、Customer、Invoice_summary、Invoice_details。在这里,我想加入这四个表并获取特定 item_code 和特定日期范围的 Sum(Invoice_details.Item_quntity) 和 Sum(Invoice_details.Price) 。主要栏目如下:

Invoice_summary :Inv_num,Inv_date,Cus_id,Total 
Items           :Item_code,Item_name,Unit_price
Invoice_details :Inv_num,Item_code,Item_qty,Price
Customers       :Cus_id,Cus_name,Route

这是我目前拥有的。这返回不止一行(整个项目名称),我只需要特定项目代码。有人可以解释我哪里出错了。

SELECT Invoice_Table.Item_Code, Items.Item_Name, 
       (Select sum(Invoice_Table.Item_Quntity)  from (Invoice_Table INNER JOIN Invoice ON Invoice_Table.Inv_Num = Invoice.Inv_Num) where ((Invoice_Table.Item_Code=[?]) And Invoice.inv_date Between #3/4/2013# And #6/4/2013#) group BY Invoice_Table.Item_Code) AS Quntity, 
       (Select sum(Invoice_Table.Price)  from (Invoice_Table INNER JOIN Invoice ON Invoice_Table.Inv_Num = Invoice.Inv_Num) where ((Invoice_Table.Item_Code=[?]) And Invoice.inv_date Between #3/4/2013# And #6/4/2013#) group BY Invoice_Table.Item_Code) AS Price 
FROM Invoice_Table 
INNER JOIN Items ON Invoice_Table.Item_Code = Items.Item_Code 
GROUP BY Invoice_Table.Item_Code, Items.Item_Name;

【问题讨论】:

    标签: mysql sql ms-access vba


    【解决方案1】:

    此查询应给出您感兴趣的总和。

    select Inv_num, Item_code, 
           sum(Item_qty) item_code_qty, 
           sum(Price) item_code_price
    from invoice_details
    group by Inv_num, Item_code
    

    看起来应该在发票汇总表中找到日期范围。看起来 Invoice_summary 和 Invoice_details 应该可以在 Inv_num 上连接。

    select inv_s.Inv_num, inv_s.Inv_date, inv_s.Cus_id, inv_s.Total,
           inv_t.item_code_qty, inv_t.item_code_price
    from Invoice_summary inv_s
    inner join (select Inv_num, Item_code, 
                       sum(Item_qty) item_code_qty, 
                       sum(Price) item_code_price
                from invoice_details
                group by Inv_num, Item_code
                ) inv_t
            on inv_s.Inv_num = inv_t.Inv_num
    where inv_s.Inv_date between ? and ?;
    

    为了解决这个问题,将其他两个表的键连接起来,并将它们的一些列添加到 SELECT 子句。

    select inv_s.Inv_num, inv_s.Inv_date, inv_s.Cus_id, cus.Cus_name, inv_s.Total,
           inv_t.item_code_qty, inv_t.item_code_price,
           items.name
    from Invoice_summary inv_s
    inner join (select Inv_num, Item_code, 
                       sum(Item_qty) item_code_qty, 
                       sum(Price) item_code_price
                from invoice_details
                group by Inv_num, Item_code
                ) inv_t
            on inv_s.Inv_num = inv_t.Inv_num
    inner join items on items.Item_code = inv_t.Item_code
    inner join Customers cus on cus.Cus_id = inv_s.Cus_id
    where inv_s.Inv_date between ? and ?;
    

    【讨论】:

    • 感谢您的考虑。但我仍然无法使用日期范围过滤数据。它要求 In_num 作为输入。我已经上传了样本。你能解释一下我哪里出错了吗? sdrv.ms/116eueC">
    • "In_num" 不是您表中的列。我猜你打错字了,你的意思是“Inv_num”。
    • 哦..对不起先生,这是错字。我在弄乱了几个小时后终于弄清楚了。我加入了这个表格并过滤了日期范围、路线和 cus_id。非常感谢你教我如何解决这样的问题。(两个竖起大拇指)
    【解决方案2】:

    试试这个..

    Select ID.Item_qty,ID.Price,I.Item_code from Invoice_summary IS 
    INNER JOIN Invoice_details ID ON ID.Inv_num=IS.Inv_num
    INNER JOIN Customers C ON C.Cus_id=IS.Inv_num
    INNER JOIN Items I ON I.Item_code=ID.Item_code
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多