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

Sql Server 2008 Ред към колона

Има няколко начина, по които можете да трансформирате данните от редове в колони.

Тъй като използвате SQL Server 2008, можете да използвате функцията PIVOT.

Предлагам да използвате row_number() функция за подпомагане на обръщането на данните. Ако имате известен брой стойности, тогава можете да кодирате твърдо заявката:

изберете потребител, категория1, категория2, категория3, категория4от( изберете [потребител], категория, 'Категория'+cast(row_number() over(дял по [потребител] ред по [потребител]) като varchar(3 )) rn от yt) dpivot( max(category) за rn в (category1, category2, category3, category4)) piv; 

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

За вашата ситуация заявихте, че ще имате неизвестен брой стойности, които трябва да бъдат колони. В такъв случай ще искате да използвате динамичен SQL, за да генерирате низа на заявката за изпълнение:

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)select @cols =STUFF((SELECT distinct ',' + QUOTENAME('Category'+cast(row_number() over(partition by [потребител] ред по [потребител]) като varchar(3))) от yt FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query ='SELECT [user],' + @cols + ' from ( select [user], category, ''Category''+cast(row_number() over(partition by [user] order by [user]) като varchar(3)) rn от yt) d pivot ( max(category) for rn in (' + @cols + ') ) p 'execute(@query) 

Вижте SQL Fiddle с демонстрация . И двете дават резултат:

<предварителен код>| ПОТРЕБИТЕЛ | КАТЕГОРИЯ1 | КАТЕГОРИЯ2 | КАТЕГОРИЯ3 | КАТЕГОРИЯ4 |------------------------------------------------ ----------| Брус | Лаптоп | Бира | (нула) | (нула) || Чък | Мобилен телефон | (нула) | (нула) | (нула) || Джак | Обувки | Вратовръзка | Стъкло | (нула) || Пеги | Обувка | Пола | прилеп | Котка |

  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 Server 2008

  2. Периодични повреди на ODBC връзката

  3. EF 4.0 Guid или Int като първичен ключ

  4. Как да съхранявате различни видове документи

  5. Изберете уникални имена на колони от списък с обединени таблици