查询发现迟到的零件并按季度列出

时间:2011-08-12 18:32:51

标签: sql database

我正在最艰难的时间为此场景创建查询:

我需要列出所有迟到的部分,并按季度加总。

以下是我目前的查询:

SELECT DISTINCTROW 
    Format$([InvoiceSub].[Date_Shipped],'\Qq yyyy') AS [Date_Shipped By Quarter]
,   Sum(InvoiceSub.Quantity) AS [Sum Of Quantity]
FROM 
    InvoiceSub 
    INNER JOIN 
        Job_Book_Sub 
        ON (InvoiceSub.[Job #] = Job_Book_Sub.[Job #]) 
        AND (InvoiceSub.[LineItem#] = Job_Book_Sub.[LineItem#])
GROUP BY 
    Format$([InvoiceSub].[Date_Shipped],'\Qq yyyy')
,   Year([InvoiceSub].[Date_Shipped]) * 4 + DatePart('q', [InvoiceSub].[Date_Shipped]) -1;


此查询可以正常显示按季度发货的所有部件。但是,我希望看到所有部件按季度运送
我在一个名为Job_Book_Sub的表中有一个字段,该字段是[LineItem_DueDate]。我想在查询中使用它,以便它显示所有迟到的部分([date_shipped]> [lineitem_duedate])。 [date_shipped]是零件发货的实际日期,[lineitem_duedate]是零件到期的日期。我知道我需要将这两个字段合并到查询中,我只是不知道如何。

有人可以告诉我该怎么做吗?如果我将[LineItem_DueDate]添加到查询中,那么它不再按季度对日期求和,而是列出每条记录(因此,在过去的10多年中,不是有45个不同季度的记录,我突然有13000+记录,因为它在查询中列出了date_shipped的每条记录。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

尝试在WHERE子句中添加过滤器:

SELECT DISTINCTROW 
    Format$([InvoiceSub].[Date_Shipped],'\Qq yyyy') AS [Date_Shipped By Quarter]
,   Sum(InvoiceSub.Quantity) AS [Sum Of Quantity]
FROM 
    InvoiceSub 
    INNER JOIN 
        Job_Book_Sub 
        ON (InvoiceSub.[Job #] = Job_Book_Sub.[Job #]) 
        AND (InvoiceSub.[LineItem#] = Job_Book_Sub.[LineItem#])
WHERE
    Job_Book_Sub.[date_shipped] > Job_Book_Sub.[lineitem_duedate]
GROUP BY 
    Format$([InvoiceSub].[Date_Shipped],'\Qq yyyy')
,   Year([InvoiceSub].[Date_Shipped]) * 4 + DatePart('q', [InvoiceSub].[Date_Shipped]) -1;