SQL Server - Problema con el order by

   
Vista:

Problema con el order by

Publicado por Juan Rivera (23 intervenciones) el 18/07/2009 20:44:40
Tengo un problema con el order by, estoy relacionando dos tablas del cual saco 4 columnas que son Codigo de la Persona, Codigo del Predio, Año de registro del monto y el Monto. Yo lo ordeno primero por codigo de la persona, por codigo del predio y por el año todos de manera ascendente.
El problema es que cuando filtro por codigo de la persona y por el codigo del predio el orden sale bien en los montos, pero cuando no lo filtro por estos dos, me lo ordena mal los montos y a veces se cambia de orden de los montos segun cada año. A que se debe esto. Sera porque tengo miles de registros de codigos de personas y predios que me lo hace mal. O le falta poner algo mas al select para que ordene bien los años y montos. Lo que yo quiero es que se mantenga fijo el orden de los años y montos cuando ejecute el select las veces que quiera. Aca esta el select.

select a.pers_p_incodper,
prd.pred_p_incodpre,
a.anio_p_chcodano, prd.prun_detotava
from m_hoja_resu a(nolock) inner join m_pred_unic prd(nolock)
on a.hore_p_incodhoj = prd.hore_p_incodhoj
where prd.estado = 1 and a.estado = 1
and a.pers_p_incodper <> 1 and prd.pred_p_incodpre <> 1
and prd.prun_detotava <> 0
--and a.pers_p_incodper = 2121 and prd.pred_p_incodpre = 65263 --ACA ES DONDE FILTRO
order by a.pers_p_incodper asc, prd.pred_p_incodpre asc, a.anio_p_chcodano asc
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

RE:Problema con el order by

Publicado por Isaias (3182 intervenciones) el 20/07/2009 18:24:58
36. Hay que evitar, en lo posible, utilizar en la cláusula WHERE argumentos tales como "IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", "LIKE '%500'". Generalmente este tipo de condiciones no permiten que SQL Server pueda utilizar los índices, aunque las columnas usadas hagan parte de él. Esto aplica también para condiciones que utilicen funciones en la columna (SUBSTR, LOWER, UPPER, DATEDIFF)

¿Que valor podira tener pers_p_incodper y prd.pred_p_incodpre?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el order by

Publicado por Juan Rivera (23 intervenciones) el 20/07/2009 22:41:18
Hola Isaias, gracias por tu respuesta, me dices que valores puede tomar?, pues esos codigos son todos numericos porque asi diseñaron la base de datos. Por ejemplo:
pers_p_incodper = 2121 y el pred_p_incodpre = 65263

En el select que te mostre, yo pongo a.pers_p_incodper <> 1 and prd.pred_p_incodpre <> 1 porque no quiero que tomen esos valores porque son de prueba, al igual que: prd.prun_detotava <> 0 porque hay montos que son cero y no quiero tomarlos en cuenta.

Haber que otro metodo puede ser para que me muestre los datos evitando poner <> 1 o el <> 0.

Te dejo el select nuevamente:

select a.pers_p_incodper, prd.pred_p_incodpre, a.anio_p_chcodano,
prd.prun_detotava
from m_hoja_resu a(nolock) inner join m_pred_unic prd(nolock) on
a.hore_p_incodhoj = prd.hore_p_incodhoj
where prd.estado = 1 and a.estado = 1
and a.pers_p_incodper <> 1 and prd.pred_p_incodpre <> 1
and prd.prun_detotava <> 0
--and a.pers_p_incodper = 283 and prd.pred_p_incodpre = 23983 --ACA ES DONDE FILTRO
order by a.pers_p_incodper asc, prd.pred_p_incodpre asc, a.anio_p_chcodano asc

De antemano te agradesco la respuesta que me pudieras dar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

RE:Problema con el order by

Publicado por Isaias (3182 intervenciones) el 21/07/2009 00:25:11
¿Que otros metodos?, algo mas simple como:

WHERE prd.pred_p_incodpre > 1
AND prd.prun_detotava > 0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el order by

Publicado por Juan Rivera (23 intervenciones) el 21/07/2009 17:55:20
Te agradesco la ayuda Isaias, quizas me falto explicarte detalladamente el problema que es el que te muestro ahora, donde la primera columna es el pers_p_incodper, la segunda es pred_p_incodpre, la tercera es el anio_p_chcodano y la cuarta prun_detotava.

Aca se muestra una parte de los datos filtrados por 2121 y por el 65263, la primera, segunda y tercera columna ordenados en ASC.

Estos datos estan filtrados y estan CORRECTOS los montos en el año 2007. El total de registros es 16 filas

2121 65263 2006 12350.50
2121 65263 2007 16958.50
2121 65263 2007 16958.50
2121 65263 2007 27133.60
2121 65263 2007 27133.60
2121 65263 2008 27722.40
2121 65263 2008 27722.40

Y estos datos estan mal ordenados en el año 2007 por lo que los montos han cambiado de posicion. El total de registros es 816499 filas:

2121 65263 2007 27133.60
2121 65263 2007 16958.50
2121 65263 2007 16958.50
2121 65263 2007 27133.60
2121 65263 2008 27722.40

Al igual que este, que tambien esta mal los montos tambien cambiaron a otra posicion. El total de registros es 816499 filas:

2121 65263 2007 27133.60
2121 65263 2007 16958.50
2121 65263 2007 27133.60
2121 65263 2007 16958.50

El segundo y tercer resultado de datos usan el mismo select.

Lo que yo quiero es que al ejecutar ese select sin filtrar varias veces me muestre los mismos registros que aparecen en el primer resultado en el año 2007 el que muestran los datos CORRECTOS. De antemano les agradesco cualquier ayuda o sugerencia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

RE:Problema con el order by

Publicado por Isaias (3182 intervenciones) el 21/07/2009 19:21:50
Ordena por AÑO y MONTO, debe hacerlo sin problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar