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