Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразуване на резултатите от колона в един ред

Опитвате се да PIVOT данните. SQL сървърът има PIVOT функция, която може да извърши това вместо вас. За да изпълните PIVOT трябва да решите каква агрегатна функция да използвате. В моя пример използвах MAX() но можете да използвате SUM() и т.н.

Ако нямате обобщена функция, тогава можете да използвате обобщена функция с CASE декларация за това.

Агрегирана/CASE версия: Тази версия изисква да кодирате твърдо всички имена в колоните.

изберете max(case when name ='Engineering' then rating end) Engineering, max(case when name ='Financials' then rating end) Финанси, max(case when name ='Scope' then rating end) Обхват, макс. (случай, когато име ='График', след това край на оценката) График, макс. (случай, когато име ='Рискове', след това край на оценката) Рискове, макс. (случай, когато име ='Хора', след това край на оценката) Хората от вашата таблица 

Вижте SQL Fiddle с демонстрация

Статична PIVOT версия: Ще кодирате твърдо стойностите на имената в тази заявка

select *from( изберете име, рейтинг от вашата таблица) srcpivot( max(рейтинг) за име в ([Инженерство], [Финанси], [Обхват], [График], [Рискове], [Хора] )) piv 

Вижте SQL Fiddle с демонстрация

Горните версии работят чудесно, ако имате известен брой колони, но ако вашето име стойностите са неизвестни, тогава можете да използвате динамичен sql за PIVOT данните.

Версия на Dynamic PIVOT:

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)select @cols =STUFF((SELECT distinct ',' + QUOTENAME(Name) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='SELECT ' + @cols + ' from ( изберете име, рейтинг от вашата таблица ) x pivot ( max(рейтинг ) за име в (' + @cols + ') ) p 'execute(@query) 

Вижте SQL Fiddle с демонстрация

И трите версии ще дадат един и същ резултат:

<предварителен код>| ИНЖЕНЕРИНГ | ФИНАНСИ | ОБХВАТ | ГРАФИК | РИСКОВЕ | ХОРА |------------------------------------------------ ----------------| 1 | 3 | 1 | 2 | 3 | 3 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL получава множество колони в една колона

  2. SQL Server REPLACE() срещу TRANSLATE():Какви са разликите?

  3. Как да избера ТОП 5 ПРОЦЕНТА от всяка група?

  4. Изчислете разликата във времето между два реда

  5. SQL Server 2008 R2 блокира в режим за един потребител