1. Pivot klauzule

    Článek: AN0001883Aktualizováno::

    Pokud potřebujeme data zobrazit formou kontingenční tabulky, použijeme SQL příkaz PIVOT.

    V níže uvedeném příkladě máme záznamy ve třídě representujicí úkoly pro jednotlivé teamy s uvedením měsíce realizace a náročnosti.

     

    Podkladové třídy mají následující vztah:

     

    Cílem je zobrazit data v následující struktuře:

     

    Toho dosáhneme prostřednictvím následujícího dotazu: 

    select *
    from
    ( select te.name team, ta.name task, 'm' + convert( varchar(10), datediff( month, dateadd( day, -datepart(day, getdate()) + 1, convert( date, getdate())), ta.month) + 1) m, ta.md
           from {{: class.task :}} ta
         left join {{: class.team :}} te on te.id = ta.team
           where ta.month > =dateadd( day, -datepart(day, getdate()) + 1, convert( date, getdate()))
                 and ta.month < dateadd( month, 5 /* pocet mesicu */,  dateadd( day, -datepart(day, getdate()) + 1, convert( date, getdate()))  )
    ) t
    pivot ( sum(md) for m in (m1, m2, m3, m4, m5)) as x

    Poznámka: Dotaz vrací sloupce m1-m5. Přejmenování sloupců je řešeno, až při zobrazení dotazu pomocí skriptu pro seznam záznamů dotazu: 

    function OnLoad()
    {
    var d = System.DateTime.Now;
    OGColumns.GetByCode('m1').Name = d.ToString('MM-yyyy');
    d = d.AddMonths(1);
    OGColumns.GetByCode('m2').Name = d.ToString('MM-yyyy');
    d = d.AddMonths(1);
    OGColumns.GetByCode('m3').Name = d.ToString('MM-yyyy');
    d = d.AddMonths(1);
    OGColumns.GetByCode('m4').Name = d.ToString('MM-yyyy');
    d = d.AddMonths(1);
    OGColumns.GetByCode('m5').Name = d.ToString('MM-yyyy');
    }

×