Welcome to Sign in | Help

Re: Comparari date calendaristice

  •  10-31-2010, 12:36 AM

    Re: Comparari date calendaristice

    [1] Cu titlu de exemplu:
    DECLARE    @AnCurent INT = 2010;

    DECLARE    @Facturi TABLE
    (
          IDFactura    INT IDENTITY(1,1) PRIMARY KEY,
          Data      DATE NOT NULL,
          Valoare      INT NOT NULL
    );
    INSERT    @Facturi
    --2009
    SELECT    '2009-01-01', 100
    UNION ALL
    SELECT    '2009-01-01', 101
    UNION ALL
    SELECT    '2009-01-11', 111
    UNION ALL
    SELECT    '2009-02-02', 200
    UNION ALL
    SELECT    '2009-02-23', 222
    UNION ALL
    --2010
    SELECT    '2010-01-01', 1000
    UNION ALL
    SELECT    '2010-02-01', 2000
    UNION ALL
    SELECT    '2010-02-22', 2002
    UNION ALL
    SELECT    '2010-02-22', 2022;

    SELECT    f.*
    FROM    @Facturi f;

    WITH    Rezultate
    AS
    (
          SELECT      f.Data,
                  YEAR(f.Data)      AS An,
                  MONTH(f.Data)      AS LunaDinAn,
                  DATEPART(wk, f.Data)  AS SaptamanaDinAn,
                  DATEPART(dw, f.Data)  AS ZiDinSaptamana,
                  SUM(f.Valoare)      AS Valoare
          FROM      @Facturi f
          GROUP BY    f.Data,
                  YEAR(f.Data),
                  MONTH(f.Data),
                  DATEPART(wk, f.Data),
                  DATEPART(dw, f.Data)
    ),      RezultateAC
    AS
    (
          SELECT      *
          FROM      Rezultate r
          WHERE      r.An = @AnCurent
    ),      RezultateAT
    AS
    (
          SELECT      *
          FROM      Rezultate r
          WHERE      r.An = @AnCurent - 1
    )
    SELECT    ac.Data                      AS DataAC,
          at.Data                      AS DataAT,
          COALESCE(ac.LunaDinAn, at.LunaDinAn)      AS LunaDinAn,
          COALESCE(ac.SaptamanaDinAn, at.SaptamanaDinAn)  AS SaptamanaDinAn,
          COALESCE(ac.ZiDinSaptamana, at.ZiDinSaptamana)  AS ZiDinSaptamana,
          COALESCE(ac.Valoare, 0)              AS ValoareAC,
          COALESCE(at.Valoare, 0)              AS ValoareAT
    FROM    RezultateAC ac
    FULL JOIN  RezultateAT at ON ac.LunaDinAn = at.LunaDinAn
          AND ac.SaptamanaDinAn = at.SaptamanaDinAn
          AND ac.ZiDinSaptamana = at.ZiDinSaptamana
    ORDER BY  COALESCE(ac.LunaDinAn, at.LunaDinAn),
          COALESCE(ac.SaptamanaDinAn, at.SaptamanaDinAn),
          COALESCE(ac.ZiDinSaptamana, at.ZiDinSaptamana)


    [2] Non Recursive Common Table Expressions - Performance ... [1] & [2]
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems