1. DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); SET @columns = N''; SELECT @columns+=N', p.'+QUOTENAME([Name]) FROM ( SELECT [DocName] AS [Name] FROM [dbo].[InsuranceClaims] AS p GROUP BY [DocName] ) AS x; SET @sql = N' SELECT [PolNumber], '+STUFF(@columns, 1, 2, '')+' FROM ( SELECT [PolNumber], [Submitted] AS [Quantity], [DocName] as [Name] FROM [dbo].[InsuranceClaims]) AS j PIVOT (SUM(Quantity) FOR [Name] in ('+STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')+')) AS p;'; EXEC sp_executesql
2. DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX); SET @cols = STUFF( ( SELECT DISTINCT ','+QUOTENAME(c.[DocName]) FROM [dbo].[InsuranceClaims] c FOR XML PATH(''), TYPE ).value('.', 'nvarchar(max)'), 1, 1, ''); SET @query = 'SELECT [PolNumber], '+@cols+'from (SELECT [PolNumber], [PolType], [submitted] AS [amount], [DocName] AS [category] FROM [dbo].[InsuranceClaims] )x pivot (max(amount) for category in ('+@cols+')) p'; EXECUTE (@query);
3. Dinámico
3.1. Otra alternatica a la opción óptima de XML es transponer las filas a columnas usando puramente SQL dinámico – sin funciones XML
4. XML
4.1. La opción XML para transponer filas a columnas es básicamente una versión óptima de PIVOT en que se ocupa de la limitación dinámica de columnas.
5. SELECT * FROM ( SELECT [PolNumber], [PolType], [Effective Date], [DocName], [Submitted] FROM [dbo].[InsuranceClaims] ) AS SourceTable PIVOT(AVG([Submitted]) FOR [DocName] IN([Doc A], [Doc B], [Doc C], [Doc D], [Doc E])) AS PivotTable;
6. Si usted ya está familiarizado con Transact-SQL (T-SQL), entonces puede que encuentre que la manera más simple de transponer filas en columnas es usar un operador PIVOT.
7. PIVOT
8. CURSOR
8.1. Los Cursores nos presentan otra opción para transponer filas en columnas que resultará en una salida como se representa en la muestra un código T-SQL que puede ser usado para transponer filas en columnas.