- 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.
Eso sería.
Adelante estudios.
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.