2013-06-26 4 views
1

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

Я решил сделать простой тест и посмотреть, могу ли я представить среднюю базовую ставку для каждого отдела по столбцам, разбитым на каждый пол (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.

Любая идея, где я ошибаюсь?

+0

Просто маленький вопрос: зачем вам нужен КТР здесь? – cha

+0

В книге говорится о том, чтобы настроить агрегирующие поля для оператора PiVOT. – ApplePie

+1

@ AlexandreP.Levasseur - Но вы забыли «SELECT» от него. –

ответ

2

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

Это должно быть

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 
+0

Ничего себе. Это была глупая ошибка: \ Спасибо! – ApplePie