Справка по сводной таблице SQL Server - PullRequest
1 голос
/ 07 октября 2010

Я пытаюсь превратить следующий ResultSet

Meetings Covers   Date         TypeName
1         3       2010-10-14   Breakfast
1         1       2010-10-14   LunchCooked
2         4       2010-10-15   Breakfast
1         3       2010-10-18   Breakfast
1         3       2010-10-19   Breakfast
1         1       2010-10-19   LunchSandwich
1         3       2010-10-20   Breakfast
1         3       2010-10-21   Breakfast
1         3       2010-10-22   Breakfast

в формат со следующими полями

Date
BreakfastMeetings
BreakfastCovers
LunchSandwichMeetings
LunchSandwichCovers
LunchCookedMeetings
LunchCookedCovers

Прав ли я, думая, что это можно сделать с помощью сводных таблиц?Любые указатели были бы хороши, в противном случае я собираюсь пойти по какому-нибудь хакерскому маршруту временной таблицы, чтобы получить данные в этом формате.

Спасибо

1 Ответ

1 голос
/ 07 октября 2010

Вот способ сделать это. На самом деле нужны и разворот, и разворотная операция. Отключение объединяет собрания и обложки в один столбец и изменяет значения TypeName на нужные имена столбцов.

В сводной таблице используются результаты отмены, чтобы указать окончательный формат.

SELECT TheDate, BreakfastMeetings, BreakfastCovers, LunchSandwichMeetings,
    LunchSandwichCovers, LunchCookedMeetings, LunchCookedCovers
FROM (
    -- unpivot to put counts in single column and create new type names
    SELECT TheDate, TypeName + MeetingCover AS TypeName, RowCounts
    FROM (SELECT TheDate, TypeName, Meetings, Covers
        FROM MyTable
        ) AS p
        UNPIVOT (RowCounts FOR MeetingCover IN (Meetings, Covers)
        ) AS UnpivotTable
    ) AS Source
    -- pivot the unpivoted data to create new columns
    PIVOT ( MAX(RowCounts) FOR TypeName IN (BreakfastMeetings, BreakfastCovers,
                                            LunchSandwichMeetings,
                                            LunchSandwichCovers,
                                            LunchCookedMeetings,
                                            LunchCookedCovers)
) AS PivotTable
ORDER BY TheDate
...