«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как транспонировать данные в SQL Server с помощью оператора PIVOT?

Как транспонировать данные в SQL Server с помощью оператора PIVOT?

Опубликовано 23 декабря 2024 г.
Просматривать:151

How to Transpose Data in SQL Server Using the PIVOT Operator?

Как транспонировать данные SQL Server с помощью PIVOT

Оператор PIVOT в SQL Server позволяет преобразовывать строки в столбцы, преобразуя данные из вертикально ориентированную форму в горизонтально ориентированную форму. Это может быть полезно при суммировании данных на основе нескольких атрибутов.

Пример данных и желаемый результат

Рассмотрим следующий начальный набор данных:

SELECT Name1, Name2, Value FROM mytable

Name1 | Name2 | Value
------- ------- ------
A      | P1     | 1
A      | P2     | 1
A      | P3     | 2
B      | P1     | 3
B      | P2     | 1
B      | P4     | 1

Желаемый результат — свести данные так, чтобы оператор PIVOT преобразовывал значения столбца Name1 в заголовки столбцов, а значения из столбца Value суммировались по столбцу Name2.

Транспонирование данных с помощью PIVOT в SQL Server 2005

Для SQL Server 2005 можно использовать оператор PIVOT следующим образом:

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  ','   QuoteName([Name1])
                        FROM myTable FOR XML PATH('') ), 1, 1, '') 


SET @sqlquery = 'SELECT * FROM
      (SELECT Name2, Name1, Value
       FROM myTable ) base
       PIVOT (Sum(Value) FOR [Name1]
       IN ('   @cols   ')) AS finalpivot'

EXECUTE ( @sqlquery )

Этот запрос динамически генерирует запрос PIVOT на основе различных значений в столбце Name1, собирая заголовки столбцов и соответствующим образом суммируя данные. В конечном итоге результатом являются транспонированные данные в нужном формате:

P1      P2      P3      P4
------- ------- ------- -------
1       1       2       NULL
3       1       NULL    1
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3