Как создать столбцы для строки без агрегатной функции в SQL Server 2005/8?

Например, мне нужно изменить

alt text

в

alt text ,

Я знаю, что PIVOT для этого, но для этого требуется агрегатная функция; и для моего случая, мне не нужно собирать только столбец нужной строки.

Вы можете использовать следующие данные образца:

CREATE TABLE[StudentScores] ( [UserName] NVARCHAR(20), [Subject] NVARCHAR(30), [Score]FLOAT, ) GO INSERT INTO[StudentScores]SELECT'Nick','Chinese',80 INSERT INTO[StudentScores]SELECT'Nick','Maths',90 INSERT INTO[StudentScores]SELECT'Nick','English',70 INSERT INTO[StudentScores]SELECT'Nick','Biology',85 INSERT INTO[StudentScores]SELECT'Kent','Chinese',80 INSERT INTO[StudentScores]SELECT'Kent','Maths',90 INSERT INTO[StudentScores]SELECT'Kent','English',70 INSERT INTO[StudentScores]SELECT'Kent','Biology',85 

Если на одном объекте будет одна запись, вы можете использовать MIN или MAX.

 SELECT * FROM [StudentScores] PIVOT ( MIN(Score) FOR [Subject] IN ([Chinese],[Maths],[English],[Biology]) ) AS p 

Я не могу сказать из вашего первоначального вопроса, какое поле вы хотите преобразовать – субъект или оценка. Однако вы можете использовать PIVOT для этого. Если вам известно количество столбцов, которые вы хотите изменить из строк в столбцы, вы можете использовать статический стержень (похожий на другой ответ). Если вы не знаете количество преобразованных столбцов, вы можете использовать динамический свод:

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(subject) from test FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT username,' + @cols + ' from ( select username, subject, score from test ) x pivot ( avg(score) for subject in(' + @cols + ') ) p ' execute(@query) 

См. SQL Fiddle with Demo

Я использовал агрегат AVG() если пользователь имеет более одного балла на одного субъекта.

Новый оператор PIVOT в 11g может помочь вам достичь желаемого результата. Проверьте это, например, http://querydb.blogspot.in/2014/05/get-data-in-rows-and-aggregates-into.html.

  • Как создать запрос в существующей таблице и построить таблицу (представление) с данными bool с использованием логического состояния?
  • Сложная таблица ошибок SQL Server для опроса
  • Таблица SQL Server-PIVOT. преобразовать строку в столбцы
  • Как выполнить Sql pivot без агрегации и с порядком?
  • Неверный подсчет в сводной таблице
  • Как превратить столбцы в строки
  • Возможно ли иметь несколько опорных точек с использованием одного и того же столбца поворота с помощью SQL Server
  • Горизонтальный столбец запроса
  • Группировка нескольких счетчиков с каждой строкой, представляющей один идентификатор
  • поворот строк в столбцы в tsql
  • Как вы PIVOT по битовому типу данных в SQL Server?
  • Давайте будем гением компьютера.