SQL Server Pivot не группируется

Я читаю подготовительный комплект к экзамену MS 70-461: запрашиваю MS SQL Server 2012, и автор рассказывает о PIVOT оператор. Я использую образец базы данных AdventureWorks для проведения тестов.

Я решил сделать простой тест и посмотреть, смогу ли я представить среднюю базовую ставку для каждого отдела по столбцам, разделенным для каждого пола (M, F).

У меня есть следующее:

WITH CTE AS
(
    SELECT 
        [DepartmentName], 
        [Gender], 
        [BaseRate] 
    FROM 
        [AdventureWorks].[dbo].[DimEmployee]
)

SELECT
    [DepartmentName], [M], [F]
FROM 
    [AdventureWorks].[dbo].[DimEmployee] PIVOT (Avg(BaseRate) FOR [Gender] IN ([M], [F])) AS P

Тем не менее, я заметил это:

Там нет групп на [DepartmentName] как должно быть (согласно книге), так как это единственное поле, не указанное в PIVOT оператор.

Я могу добавить простое предложение GROUP BY, но я не уверен, что это даст соответствующий результат, а это также означает, что я не правильно понял использование PIVOT.

Есть идеи, где я не прав?

2 ответа

Решение

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

Так должно быть

WITH CTE
     AS (SELECT [DepartmentName],
                [Gender],
                [BaseRate]
         FROM   [AdventureWorks].[dbo].[DimEmployee])
SELECT [DepartmentName],
       [M],
       [F]
FROM   CTE PIVOT (Avg(BaseRate) FOR [Gender] IN ([M], [F])) AS P 

Как насчет:

SELECT
[DepartmentName], [Gender], [BaseRate]
FROM 
[AdventureWorks].[dbo].[DimEmployee] PIVOT (Avg(BaseRate) FOR [Gender] IN ([M], [F])) AS P
Другие вопросы по тегам