numerar filas KB

20/11/2003 - 19:21 por Manuel Etcheto | Informe spam
Hola gente
Ayer he visto (por simple curiosidad) un artículo que
postearon aquí para generarlos junto al resultado:
http://support.microsoft.com/defaul...cid=kb;EN-
US;q186133#1
El procedimiento se basa en count(*) y where x >= y

1) Según entiendo yo, en los ejemplos 2 y 3 que tienen una
suma, la cláusula group by hace que los resultados se
multipliquen por la cantidad de veces que cumple la
condición (rank=count(*)), haciendo que sólo la fila 1
entregue el resultado correcto, la fila 2 el doble, la 3
el triple, y así...
Creo que lo correcto sería volver a "deshacer" la suma que
hace el group by, dividiendo por count:
select rank=count(*), s1.pub_id, sales=sum(s1.sales)/COUNT
(*)
from (select ...

2) Yo eso mismo lo he hecho en una ocasión con una #tabla
con un campo identity, la pregunta es ¿es realmente más
eficiente como dice allí esta solución que proponen,
teniendo en cuenta que hace una lectura doble de cada
tabla, y hasta veo en el plan de ejecución que al final
igual está creando una tabla temporal?
Gracias
Manuel

pd: Gracias y felicitaciones por la colaboración que
prestan día a día. Es un grupo excepcional.
 

Leer las respuestas

#1 ulises
21/11/2003 - 05:03 | Informe spam
Sí, tienes razón, se debería dividir entre count(*) para
tener el resultado correcto, sería una buena idea que le
escribas a Microsoft en el enlace que te brinda para que
les hagas llegar tus comentarios, ahora bien esta técnica
de auto-join es bastante usada para otros casos y lo
encuentro más eficientem que la técnica típica de tablas
temporales y cursores que es con la cual lo comparan en el
artículo.

Saludos,
Ulises

Hola gente
Ayer he visto (por simple curiosidad) un artículo que
postearon aquí para generarlos junto al resultado:
http://support.microsoft.com/defaul...cid=kb;EN-
US;q186133#1
El procedimiento se basa en count(*) y where x >= y

1) Según entiendo yo, en los ejemplos 2 y 3 que tienen


una
suma, la cláusula group by hace que los resultados se
multipliquen por la cantidad de veces que cumple la
condición (rank=count(*)), haciendo que sólo la fila 1
entregue el resultado correcto, la fila 2 el doble, la 3
el triple, y así...
Creo que lo correcto sería volver a "deshacer" la suma


que
hace el group by, dividiendo por count:
select rank=count(*), s1.pub_id, sales=sum(s1.sales)/COUNT
(*)
from (select ...

2) Yo eso mismo lo he hecho en una ocasión con una #tabla
con un campo identity, la pregunta es ¿es realmente más
eficiente como dice allí esta solución que proponen,
teniendo en cuenta que hace una lectura doble de cada
tabla, y hasta veo en el plan de ejecución que al final
igual está creando una tabla temporal?
Gracias
Manuel

pd: Gracias y felicitaciones por la colaboración que
prestan día a día. Es un grupo excepcional.

Preguntas similares