2013-01-23 119 views
0

我有下面的代码,它完美地工作。在查询中包含CTE

我需要做的是将它包含在查询中,使用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 

从股票那里..........

给予产生ABCD结果的输出

回答

0

你应该能够重新排序你如何使用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 
+1

是的......但是'AVG()'是一个聚合函数,所以他需要一个'GROU P BY'作为其他栏目。 –

+0

啊,谢谢!我永远不得不回去添加我的GROUP BY。 – Valkyrie

+0

非常感谢 - 完美。我没有意识到我可以像这样分裂它。 –