Contumaz

Pro
Se incorporó
9 Marzo 2007
Mensajes
992
Esto lo tuve que hacer porque tenemos una aplicación que se demoraba años en exportar datos para los clientes.
Probando y probando nos percatamos que al pivotear se colgaba.
Con esta solución lo que antes demoraba muchos minutos o que simplemente nunca terminaba ahora demora menos de un segundo.

Pd: No le cambie los nombres a las tablas pq me da paja, pero ya tienen la idea.

Código:
declare [MENTION=59240]cliente[/MENTION] varchar (20)
declare @Nlinicio int
declare @NlFin int


set [MENTION=59240]cliente[/MENTION] = 'codigocliente'
set @nlinicio = 225456
set @nlfin = 225700


declare [MENTION=104299]col[/MENTION]umnas varchar(max)


set [MENTION=104299]col[/MENTION]umnas = ''


select [MENTION=104299]col[/MENTION]umnas =  coalesce [MENTION=104299]col[/MENTION]umnas + '[' + cast(paraid as varchar(30)) + '],', '')
FROM (
		select distinct rtrim(d.paraid)+'('+rtrim(c.units)+')' as paraid
		from ingmuestra a 
		join samples b on a.ingnlabo = b.lab_No
		join sample_analysis c on b.sample_number = c.sample_number
		join analisis d on c.anacod = d.anaid 
		where a.scodaux = [MENTION=59240]cliente[/MENTION]
		and a.ingnlabo >= @nlinicio 
		and a.ingnlabo <= @nlfin) as paraid


set [MENTION=104299]col[/MENTION]umnas = left [MENTION=104299]col[/MENTION]umnas,LEN [MENTION=104299]col[/MENTION]umnas)-1)


DECLARE @SQLString nvarchar(max);


set @SQLString = N'
select *
from (
		select a.ingnlabo as Numero_laboratorio
		,b.sample_number as Numero_Muestra
		,a.ingfecha as Fecha_Muestreo
		,a.ingfllega as Fecha_Ingreso
		,a.ingfecaprob as Fecha_Aprobacion
		,rtrim(d.paraid)+''(''+rtrim(c.units)+'')'' as paraid
		,c.result
		from ingmuestra a 
		join samples b on a.ingnlabo = b.lab_No
		join sample_analysis c on b.sample_number = c.sample_number
		join analisis d on c.anacod = d.anaid 
		where a.ingnlabo >= '+cast(@nlinicio as varchar)+'
		and a.ingnlabo <= '+cast(@nlfin as varchar)+' and a.scodaux=' [MENTION=59240]cliente[/MENTION]'') as ST
pivot
(
max(result)
for paraid in (' + [MENTION=104299]col[/MENTION]umnas + ')
) as PivotTable;'


set @sqlstring =replace(@sqlstring, [MENTION=59240]cliente[/MENTION]' [MENTION=59240]cliente[/MENTION])


EXECUTE sp_executesql @SQLString

Eso sería.

Adelante estudios.
 

SeWa

Pro
Se incorporó
4 Abril 2006
Mensajes
536
Pudiste hacer el PIVOT dinámico, también. Además, en estos escenarios siempre es bueno revisar los índices de las tablas, para reorganizarlos o simplemente regenerarlos.
 
Upvote 0
Subir