Welcome to Sign in | Help

Re: CTE cu variabile

  •  06-20-2007, 10:52 AM

    Re: CTE cu variabile

    Da, se poate. Uite un exemplu cât de cât interesant:

    USE AdventureWorks
    GO
    CREATE FUNCTION MonthlySalesForAProduct(@ProductID int)
    RETURNS TABLE AS RETURN
    WITH TotalSalesForAProduct AS (
        SELECT YEAR(OrderDate) as Y, MONTH(OrderDate) as M, SUM(OrderQty) as Qty
        FROM Sales.SalesOrderHeader h
        INNER JOIN Sales.SalesOrderDetail d ON h.SalesOrderID=d.SalesOrderID
        WHERE d.ProductID=@ProductID
        GROUP BY YEAR(OrderDate), MONTH(OrderDate)
    )
    SELECT a.Y, a.M, a.Qty, b.Qty as PrevQty,
        CONVERT(numeric(10,2),100.*(a.Qty-b.Qty)/b.Qty) as PercentChange
    FROM TotalSalesForAProduct a LEFT JOIN TotalSalesForAProduct b
    ON a.Y*12+a.M=b.Y*12+b.M+1
    --ORDER BY Y, M

    GO
    SELECT * FROM MonthlySalesForAProduct(761) ORDER BY Y, M

    Am preferat să fac o funcţie, ca să pot să refolosesc rezultatul în alte query-uri, dar se putea utiliza un parametru într-un CTE şi dacă era procedură stocată.

    Dacă ai probleme, postează codul pe care l-ai scris (cu structura tabelelor, câteva date de test şi rezultatele dorite).

    Răzvan

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems