Êëàññèêà áàç äàííûõ - ñòàòüè

       

SELECT idTabel, idPaymentType, idPerson, Hours,


    [26] AS h26, [27] AS h27, [28] AS h28, [29] AS h29, [30] AS h30, [31] AS h31
FROM
    ( SELECT idTabel, idPaymentType, idPerson, Hours, DAY(Date) as Day 
     FROM tblTabelFact) AS t1
           PIVOT (SUM(Hours) FOR [Day] IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10],
                          [11], [12], [13], [14], [15], [16], [17], [18], [19], [20],
                          [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31])) AS t2

  •  ìîäåëè ñòðîê ìîæíî ñîçäàòü unpivot-ïðåäñòàâëåíèå, àíàëîãè÷íîå òàáëèöå TabelFact â ìîäåëè À:

    SELECT     TabelRow.idPaymentType, Calendar.Date, TabelRow.idPerson,
        TabelRow.idTabel, TabelRow.h1 AS Hours
    FROM Tabel
        INNER JOIN TabelRow ON Tabel.idTabel = TabelRow.idTabel
        INNER JOIN Calendar ON YEAR(Calendar.Date) = YEAR(Tabel.Date)
               AND MONTH(Calendar.Date) = MONTH(Tabel.Date) AND Calendar.Day = 1
    UNION
    SELECT     TabelRow.idPaymentType, Calendar.Date, TabelRow.idPerson,
        TabelRow.idTabel, TabelRow.h2 AS Hours
    FROM Tabel
        INNER JOIN TabelRow ON Tabel.idTabel = TabelRow.idTabel
        INNER JOIN Calendar ON YEAR(Calendar.Date) = YEAR(Tabel.Date)
               AND MONTH(Calendar.Date) = MONTH(Tabel.Date) AND Calendar.Day = 2
    UNION
    ...
    UNION
    SELECT     TabelRow.idPaymentType, Calendar.Date, TabelRow.idPerson,
        TabelRow.idTabel, TabelRow.h31 AS Hours
    FROM Tabel
        INNER JOIN TabelRow ON Tabel.idTabel = TabelRow.idTabel
        INNER JOIN Calendar ON YEAR(Calendar.Date) = YEAR(Tabel.Date)
               AND MONTH(Calendar.Date) = MONTH(Tabel.Date) AND Calendar.Day = 31

    äëÿ MS SQL-Server 2005:

    SELECT t.idTabel, t.idPaymentType, idPerson, Hours, Calendar.Date
    FROM tblTabelRow
               UNPIVOT (Hours For Day IN (h1, h2, h3, h4, h5, h6, h7, h8, h9, h10,
                                     h11, h12, h13, h14, h15, h16, h17, h18, h19, h20,
                                     h21, h22, h23, h24, h25, h26, h27, h28, h29, h30, h31)) AS t
        INNER JOIN tblTabel ON t.idTabel = tblTabel.idTabel
        INNER JOIN Calendar ON YEAR(tblTabel.Date) = Calendar.YEAR

    Ñîäåðæàíèå  Íàçàä  Âïåðåä