w3schools tutorial multiple for fechas ejemplos dummies con columns tsql sql-server-2008-r2 pivot unpivot

tsql - multiple - tutorial pivot sql



Tabla de pivote T-SQL(Un) (1)

Usualmente uso sql dinámico. Algo como esto

create table #T ( ID int, aText1 varchar(4), aText2 varchar(4), aInt1 int, aInt2 int ) insert into #T select 1, ''ABC1'', ''XYZ1'', 2, 20 union select 2, ''ABC1'', ''XYZ2'', 3, 25 union select 3, ''ABC2'', ''XYZ2'', 1, 30 union select 4, ''ABC2'', ''XYZ1'', 4, 35 declare @sql nvarchar(max) set @sql = ''select aText1 '' select @sql = @sql + '', SUM(case when aText2 = '''''' + aText2 + '''''' then aInt1 end) as ['' + aText2 + '' - aInt1] ''+ '', SUM(case when aText2 = '''''' + aText2 + '''''' then aInt2 end) as ['' + aText2 + '' - aInt2]'' from ( select distinct aText2 from #T ) T set @sql = @sql + '' from #T group by aText1'' exec sp_executeSQL @sql drop table #T

O puede crear otra vista (como # T2 en mi próximo ejemplo) y usar PIVOT

create table #T ( ID int, aText1 varchar(4), aText2 varchar(4), aInt1 int, aInt2 int ) insert into #T select 1, ''ABC1'', ''XYZ1'', 2, 20 union select 2, ''ABC1'', ''XYZ2'', 3, 25 union select 3, ''ABC2'', ''XYZ2'', 1, 30 union select 4, ''ABC2'', ''XYZ1'', 4, 35 create table #T2 ( aText1 varchar(4), aText2 varchar(20), aValue int ) insert into #T2 select aText1, aText2 + '' - aInt1'' as aText2, aInt1 from #T union select aText1, aText2 + '' - aInt2'', aInt2 from #T declare @sql nvarchar(max), @columns nvarchar(max) set @columns = '''' select @columns = @columns + '', ['' + aText2 + '']'' from (select distinct aText2 from #T2) as T set @columns = substring(@columns, 2, len(@columns)) set @sql = '' SELECT * FROM (SELECT aText1, aText2, aValue FROM #T2 ) AS SourceTable PIVOT ( SUM(aValue) FOR aText2 in (''+@columns+'') ) AS PivotTable'' exec sp_executeSQL @SQL drop table #T2 drop table #T

Tengo una vista de la siguiente manera (hice una vista ya que pensé que sería más fácil acceder a la tabla más complicada)

ID | aText1 | aText2 | aInt1 | aInt2 ------------------------------------- 1 | ABC1 | XYZ1 | 2 | 20 2 | ABC1 | XYZ2 | 3 | 25 3 | ABC2 | XYZ2 | 1 | 30 4 | ABC2 | XYZ1 | 4 | 35

Necesito el resultado para leer

| XYZ1 | XYZ2 aText1 | aInt1 | aInt2 | aInt1 | aInt2 --------------------------------------- ABC1 | 2 | 20 | 3 | 25 ABC2 | 1 | 30 | 4 | 35

He intentado varios pivotes pero todos fallan. aText1 y aText2 pueden ser cualquier cantidad de valores. Tan cerca de esta solución como sea posible sería realmente útil