Foros del Web » Programando para Internet » ASP Clásico »

Selects complicados

Estas en el tema de Selects complicados en el foro de ASP Clásico en Foros del Web. Espero que mis dudas sirvan también a otras personas, de lo contrario voy a pensar que sólo yo me vuelvo loco intentando hacer cosas imposibles... ...
  #1 (permalink)  
Antiguo 08/03/2007, 22:23
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 18 años, 2 meses
Puntos: 0
Selects complicados

Espero que mis dudas sirvan también a otras personas, de lo contrario voy a pensar que sólo yo me vuelvo loco intentando hacer cosas imposibles...

Todos los SELECT que me encuentro por ahí son más o menos normales, con sus WHERE, sus AND, sus OR, sus ORDER, etc.

Pero yo necesito cosas complicadas, o tal vez es que las complique yo sólo, pudiendo hacerlas de manera más facil...

En fin, que he aquí una pequeña vuelta de tuerca que no sé dar a mis SELECT:

TABLA TRABAJOS

CAMPOS Id_cliente (valor único) - Nombre_cliente (se puede repetir) - Horas (numérico)

REGISTROS

1 - Pepe - 5
2 - Manuel - 3.5
3 - Jorge - 2
4 - Manuel - 1
5 - Laura - 4
6 - Pepe - 1
...

Es decir, la tabla recoge cuántas horas le has dedicado a un cliente en concreto, pero en distintas sesiones... si un día trabajas 5 horas para Pepe, lo apuntas, si otro día trabajas 1 hora, lo apuntas también en otro registro, etc.

LO QUE QUIERO ES:

Crear un select en dos columnas, que te recoja en la primera columna el nombre del cliente, sin posibilidad de repetir nombres, y en la segunda columna el TOTAL de horas que has trabajado para ese cliente, sumando todos los registros asociados a él.

Quedaría así:

Pepe - 6
Manuel - 4.5
Jorge - 2
Laura - 4

Metiendo un SELECT DISTINCT nombre_cliente consigo un listado de nombres sin repetir registros:

Pepe
Manuel
Jorge
Laura

O sea, que no repite valores, aunque existan en la base de datos.

Para las sumas, hago un SELECT SUM (horas) as suma_horas, y luego lo vuelco con un <% rs="suma_horas" %>. Así consigo el total de horas trabajadas para todos los clientes (o para cada uno por separado si le añado un WHERE nombre_cliente = 'Pepe', por ejemplo).

Ambos SELECT funcionan por separado.

Pero si quiero meter las dos cosas juntas, a dos columnas, no sé cómo hacerlo.

El código inicial, y que de momento funciona, para conseguir la primera columna, correspondiente al listado de clientes, es (lo pongo de manera resumida, puedo facilitarlo completo):

...
SELECT DISTINCT nombre_cliente
...
while not rs.eof
...
<td><% rs="nombre_cliente" %></td>
...
rs.movenext
loop
rs.close
...

Ahora, bien... ¿dónde puedo meter el SELECT SUM? Yo quiero que haya otra columna al lado de la primera, luego tendría que haber otro <td><% rs="suma_horas" %></td> antes del movenext y el bucle. Pero entonces no puedo crear un SELECT nuevo, pues todavía estoy dentro del otro...

Supongo que en la sentencia del primer SELECT tendría que definir que el SELECT inicial sea la suma de los dos, algo así como:

SELECT DISTINCT nombre_cliente
"Y TAMBIÉN"
SELECT SELECT SUM (horas) as suma_horas

Pero no sé unir ese tipo de expresiones, no sé si hay que usar el JOIN, pues nunca lo he usado, y, además, el SELECT SUM no tendría que darme el total de horas de la tabla, sino el total de horas POR CADA CLIENTE.

¿Difícil? ¿Rizar el rizo? ¿Se puede hacer de algún modo mucho más simple?

Estoy abierto a todo tipo de comentarios, por supuesto.

Dando de antemano las gracias por leeros tan vasta consulta...

Saludos.

Moleman.
  #2 (permalink)  
Antiguo 09/03/2007, 01:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 1
Re: Selects complicados

Prueba con esta consulta:

SELECT nombre_cliente,SUM(horas)
FROM trabajos
GROUP BY nombre_cliente

Con esta consulta no te hace falta el DISTINCT pq directamente estas agrupando por nombre de cliente.

Un saludo
  #3 (permalink)  
Antiguo 09/03/2007, 08:02
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Selects complicados

¡Muchas gracias!

Qué facil resulta cuando te dicen cómo hacerlo... La verdad es que no conocía ese GROUP BY, puede que lo hubiera visto alguna vez, pero no lo identificaba como para poder hacer esto.

Ahora quiero complicar un poco más el código, a ver si soy capaz de seguir añadiendo cosas a lo que me has dicho.

Gracias.

Moleman.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:31.