ayuda con una consulta

30/11/2007 - 21:53 por SergioT | Informe spam
Éste es un mensaje de varias partes en formato MIME.
=_NextPart_000_000A_01C83371.97CE2650

hola
una consulta que me parece no es muy dificil pero no me sale ( sql 2000)

Tengo una tabla mas o menos asi

tabla
oficina, jefe,vendedor,CantidadVentas
a 1 juan 7
a 1 pedro 8
a 1 pablo 9
a 2 marco 5
a 2 ttito 8
a 3 antonio 2
a 3 paula 10
a 3 marcia 7


necesito obtener una tabla asi:

oficina, jefe,vendedor,CantidadVentas
a 1 pablo 9
a 2 tito 8
a 3 paula 10

como ven necesito obtener a los vendedores con mas ventas por cada jefe de ventas

salu2
y gracias de antemano
=_NextPart_000_000A_01C83371.97CE2650

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.6000.16544" name=GENERATOR></HEAD>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px"
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV>hola<BR>una consulta que me parece no es muy dificil pero no me sale ( sql
2000)<BR><BR>Tengo una tabla mas o menos asi<BR><BR>tabla<BR>oficina,
jefe,vendedor,CantidadVentas<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
juan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
7<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pedro&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
8<BR><STRONG>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pablo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
9</STRONG><BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
marco&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
5<BR><STRONG>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ttito&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
8</STRONG><BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
antonio&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;
<BR><STRONG>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
paula&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10</STRONG></DIV>
<DIV>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
marcia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7<BR><BR><BR>necesito obtener
una tabla asi:<BR><BR>oficina,
jefe,vendedor,CantidadVentas<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pablo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
9<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
tito&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
8<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
paula&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<BR><BR>como ven necesito
obtener a los vendedores con mas ventas por cada jefe de
ventas<BR><BR>salu2<BR>y gracias de antemano</DIV></BODY></HTML>

=_NextPart_000_000A_01C83371.97CE2650--

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
01/12/2007 - 10:35 | Informe spam
Hola Sergio,

On 30 nov, 21:53, "SergioT" wrote:
hola
una consulta que me parece no es muy dificil pero no me sale ( sql 2000)

Tengo una tabla mas o menos asi

tabla
oficina, jefe,vendedor,CantidadVentas
a 1 juan 7
a 1 pedro 8
a 1 pablo 9
a 2 marco 5
a 2 ttito 8
a 3 antonio 2
a 3 paula 10
a 3 marcia 7

necesito obtener una tabla asi:

oficina, jefe,vendedor,CantidadVentas
a 1 pablo 9
a 2 tito 8
a 3 paula 10

como ven necesito obtener a los vendedores con mas ventas por cada jefe de ventas




Por oficina, por jefe de ventas:

select *
from tabla T
where CantidadVentas (select max(CantidadVentas)
from tabla
where oficina = T.oficina and jefe = T.jefe )

Si tiene que ser solo por jefe de ventas no incluyas
el 'oficina = T.oficina' en el where de la subconsulta.

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Martín
01/12/2007 - 14:27 | Informe spam
es correcta esa consulta, pero no te parece ineficaz desde el punto de vista
de los "ordenes" para este caso?
porque si va a devolver todos los campos, hacer un join... y devolver un
máximo forzará a que recorrás más veces la tabla, aunque en tiempo
constante...

Hago un comentario más para ver si alguien se prende a debatir de
ordenes

esto es como normalizar siempre una tabla...no siempre los libros tienen la
razón te doy un ejemplo que me pasó en mi trabajo hace poco:

me dieron hecha una DB con 2 tablas y no se iba a editar a futuro ni nada,
era para usar una sola vez:

tenía una tabla de clientes:

nombre, apellido, teléfono, email, dirección, idOcupacion

y una tabla que decía la ocupación (con tres casos)

1 ing sistemas
2 ing químico
3 ing elécrico

y hacía joins con esta última para las consultas que pidieran info de la
ocupación
el tema es: ESTO ES LO QUE DICEN LOS LIBROS, NORMALIZAR; ESTA "BIEN" HECHA
SEGUN LOS LIBROS


pero normalizar sirve cuando no hay que repetir información, es decir si en
la tabla ocupación tuviera 10 campos por ej me parece útil esta tabla,
porque si lo hiciera en una sola tabla (es decir ing sistemas, ing quimico,
ing eléctrico lo pusiera en un campo de clientes siendo así 1 sola tabla) se
repetirian datos y estaría muy muy mal, pero en este caso no estaría mal
eliminar esa tabla y poner ese campo en clientes, porque sólo hay un
campo!!!!!!

y repito no es una tabla de mantenimiento, y no creo que haya que
identificarlo como una entidad...

poniendo ese campo en clientes ahorarría, un joins con esa tabla con
relación 1 - N por cada vez que pida esa info.

pero bue... abro el debate de ordenes y eficacia para ver si alguien se
prende.

Saludos,
Martín
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
01/12/2007 - 16:52 | Informe spam
Hola Martín,

On 1 dec, 14:27, "Martín" wrote:
es correcta esa consulta, pero no te parece ineficaz desde el punto de vista
de los "ordenes" para este caso?



Es muy eficaz (da el resultado esperado.) Porque no se si te
habrás dado cuenta pero tu proposición no es eficaz (no es una
solución al problema expuesto).
Pon alguna alternativa y entonces se podrá elegir la solución
más rápida. Eso no lo va a discutir nadie.

porque si va a devolver todos los campos, hacer un join... y devolver un
máximo forzará a que recorrás más veces la tabla, aunque en tiempo
constante...



No tiene por qué recorrer más veces la tabla. Pero para
cada grupo de vendedores bajo un jefe de alguna forma
habrá que determinar la mayor de las cantidades de ventas
(max) y el vendedor que las hizo para encontrar respuesta
a la pregunta que hizo Sergio.


Hago un comentario más para ver si alguien se prende a debatir de
ordenes

esto es como normalizar siempre una tabla...no siempre los libros tienen la
razón te doy un ejemplo que me pasó en mi trabajo hace poco:




Ese es un punto de vista. Otro punto de vista es que no siempre
las implementaciones tienen razón en hacer las cosas como las
hacen.


me dieron hecha una DB con 2 tablas y no se iba a editar a futuro ni nada,
era para usar una sola vez:

tenía una tabla de clientes:

nombre, apellido, teléfono, email, dirección, idOcupacion

y una tabla que decía la ocupación (con tres casos)

1 ing sistemas
2 ing químico
3 ing elécrico

y hacía joins con esta última para las consultas que pidieran info de la
ocupación
el tema es: ESTO ES LO QUE DICEN LOS LIBROS, NORMALIZAR; ESTA "BIEN" HECHA
SEGUN LOS LIBROS

pero normalizar sirve cuando no hay que repetir información, es decir si en
la tabla ocupación tuviera 10 campos por ej me parece útil esta tabla,



Es totamente irrelevante cuanta columnas tenga la tabla ocupación.
Y no se trata solo de 'no repetir información' sino de evitar
anomalías que eso conlleva al actualizar los datos.

porque si lo hiciera en una sola tabla (es decir ing sistemas, ing quimico,
ing eléctrico lo pusiera en un campo de clientes siendo así 1 sola tabla) se
repetirian datos y estaría muy muy mal, pero en este caso no estaría mal
eliminar esa tabla y poner ese campo en clientes, porque sólo hay un
campo!!!!!!



Totalmente en desacuerdo con esto último. Si solo se trata de un
campo o de mil es totalmente irrelevante.

Lo relevante son las respuestas a preguntas como:
Deben existir ocupaciones sin que tengamos clientes con esa
ocupación?
Donde está la ocupación 'ing sistemas' cuando todos los
clientes con esa ocupación han sido borrados?
Se acepta gestionar la redundancia en la tabla clientes?
(cuando se cambie el nombre de una ocupación se tiene
que cambiar para todos los clientes, que pueden ser miles,
millones?? con la misma ocupación.)
Puede que el mantetimiento de ocupaciones posibles y eventualmente
estandarizadas dentro de la organización, sea resposabilidad
de otro usuario y/o aplicación que el que hace el mantenimiento
de los clientes?



y repito no es una tabla de mantenimiento, y no creo que haya que
identificarlo como una entidad...

poniendo ese campo en clientes ahorarría, un joins con esa tabla con
relación 1 - N por cada vez que pida esa info.



Parece que le tienes manía a los joins. Los joins saben hacer
muy buen uso de índices para que la diferencia en rapidez
sea inapreciable.



pero bue... abro el debate de ordenes y eficacia para ver si alguien se
prende.




Se puede debatir lo que quieras. En general estoy muy en
desacuerdo con la idea general de tu aportación.

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 Martín
01/12/2007 - 19:47 | Informe spam
Hola Carlos,

1) La solución que propuse es correcta para el problema dado.


2)


"No tiene por qué recorrer más veces la tabla. Pero para
cada grupo de vendedores bajo un jefe de alguna forma
habrá que determinar la mayor de las cantidades de ventas
(max) y el vendedor que las hizo para encontrar respuesta
a la pregunta que hizo Sergio."

No soy experto de db, pero he trabajado y leido bastante, y creo que un join
aumenta tus ordenes (tiempos), pero si no es así


3)

"Es totamente irrelevante cuanta columnas tenga la tabla ocupación.
Y no se trata solo de 'no repetir información' sino de evitar
anomalías que eso conlleva al actualizar los datos."

Por eso aclaré que no era una tabla de mantenimiento, fue un ejemplo para
demostrar que no siempre los libros tienen la razón

4)

"Totalmente en desacuerdo con esto último. Si solo se trata de un
campo o de mil es totalmente irrelevante.

Lo relevante son las respuestas a preguntas como:
Deben existir ocupaciones sin que tengamos clientes con esa
ocupación?
Donde está la ocupación 'ing sistemas' cuando todos los
clientes con esa ocupación han sido borrados?
Se acepta gestionar la redundancia en la tabla clientes?
(cuando se cambie el nombre de una ocupación se tiene
que cambiar para todos los clientes, que pueden ser miles,
millones?? con la misma ocupación.)
Puede que el mantetimiento de ocupaciones posibles y eventualmente
estandarizadas dentro de la organización, sea resposabilidad
de otro usuario y/o aplicación que el que hace el mantenimiento
de los clientes?"

Creo que es muy relevante la cantidad de campos que tengay estaría bueno
seguir debatiendolo...alguno tiene la razón, y lo mejor es que el que la
tenga convenza al otro, así los dos aprenderemos,.


5)

"Parece que le tienes manía a los joins. Los joins saben hacer
muy buen uso de índices para que la diferencia en rapidez
sea inapreciable."

mmm, tal vez sí...pero repito...creo que la cantidad de joins entre tablas
aumenta el tiempo de la consulta...(hablando de tablas grandes con muchos
registros)


6) "Se puede debatir lo que quieras. En general estoy muy en
desacuerdo con la idea general de tu aportación."

Bueno, me interesa seguir el debate, porque uno tiene la razón, y estaría
bueno que el que no la tenga sepa porque no la tiene


Saludos,

Agregame a la mensajería instantanea si quieres y debatimos mejor es:


Martín
Respuesta Responder a este mensaje
#5 Juan Diego Bueno
01/12/2007 - 20:13 | Informe spam
Martín" escribió en el mensaje
news:% Hola Carlos,

1) La solución que propuse es correcta para el problema dado.



Pues va a ser que no, con tu solución:

OFICINA JEFE VENDEDOR CANTIDADVENTAS


A 3 PAULA 10
A 1 PABLO 9
A 1 PEDRO 8

Con la solución de Carlos:

A 3 PAULA 10
A 2 TITO 8
A 1 PABLO 9

Lo que pide Sergio:
oficina, jefe,vendedor,CantidadVentas
a 1 pablo 9
a 2 tito 8
a 3 paula 10


Puedes plantear el debate que quieras, pero que sea sobre una solución
correcta, porque sino, el debate no tiene ningún sentido. Puedes retomarlo
planteando una solución sin join, pero que funcione y haga lo que pide
Sergio.

Por otra parte, si se va a montar un debate, mejor aquí que por privado, así
aprendemos todos y todos podemos participar

Saludos
Juan Diego Bueno www.moondance.tk
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida