Sql 在查询中包含CTE

Sql 在查询中包含CTE,sql,Sql,我有下面的代码,它可以完美地工作 我需要做的是将它包含在查询中,使用CTE的结果作为查询结果中的一列,但我无法找到包含它的方法。 有什么想法吗 我想要的是: select a, b, c, d, WITH invoicedates AS ( SELECT ROW_NUMBER() OVER (ORDER BY Inv_Date DESC) AS RowNumber, inv_Date, INVIT_PARTNO FROM Invoices

我有下面的代码,它可以完美地工作

我需要做的是将它包含在查询中,使用CTE的结果作为查询结果中的一列,但我无法找到包含它的方法。 有什么想法吗

我想要的是:

select a, 
b, 
c, 
d,

WITH invoicedates AS (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY Inv_Date DESC) AS RowNumber,
        inv_Date, INVIT_PARTNO
    FROM Invoices join InvoiceItems on invit_invno = inv_no
    WHERE invit_partno  = stock_no and inv_canind <> 'Y' and inv_date >= DATEADD(yy, -1, getdate())
)
SELECT
   AVG(DATEDIFF(DD, O2.Inv_Date, O1.Inv_Date)) AS AverageFrequency
FROM invoicedates O1
LEFT JOIN invoicedates O2
    ON O2.RowNumber = O1.RowNumber + 1
从库存到


要给出b c d结果的结果输出

您应该能够重新排序您使用CTE的方式:

    ; WITH invoicedates (RowNumber, inv_Date, INVIT_PARTNO) AS (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY Inv_Date DESC) AS RowNumber,
        inv_Date, INVIT_PARTNO
    FROM Invoices join InvoiceItems on invit_invno = inv_no
    WHERE invit_partno  = stock_no and inv_canind <> 'Y' and inv_date >= DATEADD(yy, -1, getdate())
)

select a, 
b, 
c, 
d,
  AVG(DATEDIFF(DD, O2.Inv_Date, O1.Inv_Date)) AS AverageFrequency
FROM invoicedates O1
LEFT JOIN invoicedates O2
    ON O2.RowNumber = O1.RowNumber + 1

对但是AVG是一个聚合函数,所以他需要一个其他列的GROUPBY。啊,谢谢!我永远都得回去添加我的群组。非常感谢你——太完美了。我没有意识到我可以那样分割它。