¿Se puede utilizar los valores devueltos de una consulta a la base de datos como parámetros de otra?

Para obtener un % necesito de 2 valores para obtenerlo, los cuales son dados por 2 consultas distintas, mi pregunta es, ¿en una consulta es posible obtener los valores de otras consulta? Ejemplo
Consulta 1 total de horas por semana
Consulta 2 total de horas por mes
Consulta 3 total de horas por semana - horas por mes
Esta ultima consulta quisiera generarla

1 respuesta

Respuesta
1
Supongamos que tenemos la tabla 'tblHorasTrabajo' con la siguiente descripción: fechaTrabajo (tipo fecha) y horasTrabajadas (número doble).
Debemos definir qué quieres definir como 'semana' dentro del mes. Supongamos que la semana 1 es del día 1 al 7, la semana 2 del 8 al 14, la semana 3 del 15 al 21, semana 4 del 22 al 28 y la semana 5 del 29 al fin de mes.
La primera consulta (la llamaremos 'consultaHorasSemana') tendrá que tener el siguiente código SQL:
SELECT Year([fechaTrabajo]) AS año, Month([fechaTrabajo]) AS mes, IIf(Day([fechaTrabajo])<=7,1,IIf(Day([fechaTrabajo])<=14,2,IIf(Day([fechaTrabajo])<=21,3,IIf(Day([fechaTrabajo])<=28,4,5)))) AS semana, Sum(tblHorasTrabajo.horasTrabajadas) AS horasSemana
FROM tblHorasTrabajo
GROUP BY Year([fechaTrabajo]), Month([fechaTrabajo]), IIf(Day([fechaTrabajo])<=7,1,IIf(Day([fechaTrabajo])<=14,2,IIf(Day([fechaTrabajo])<=21,3,IIf(Day([fechaTrabajo])<=28,4,5))));
La segunda consulta ('consultaHorasMes'), agruparía los datos sólo por año y mes, y su código SQ´L sería:
SELECT Year([fechaTrabajo]) AS año, Month([fechaTrabajo]) AS mes, Sum(tblHorasTrabajo.horasTrabajadas) AS horasMes
FROM tblHorasTrabajo
GROUP BY Year([fechaTrabajo]), Month([fechaTrabajo]);
La última consulta que quieres construir se basa en las dos anteriores. Al diseñar la consulta tendrás que elegir las dos consultas anteriores en lugar de la tabla de horasTrabajadas.
El código SQL de esta última consultas, usando los nombres de las anteriores, será:
SELECT csh.año, csh.mes, csh.semana, csh.horasSemana, chm.horasMes, [horasSemana]/[horasmes]*100 AS porcentajeSemanaMes
FROM consultaHorasSemana AS csh INNER JOIN consultaHorasMes AS chm ON (csh.mes = chm.mes) AND (csh.año = chm.año);
OJO: fíjate que he puesto 'alias' a los nombres de las consultas (consultaHorasSemana tiene como alias chs y consultaHorasMes tiene como alias chm). Esto lo hago por simple comodidad a la hora de leer y revisar la consulta, ya que se ve mejor usando un nombre cortito que el nombre largo que tiene realmente la consulta.
Excelente era lo que estaba buscando, oye una pregunta más, es posible que un gráfica pueda agregar otra consulta, ¿para qué pueda hacer una camparacion?
Gracias
Si quieres hacer una gráfica (supongo que por meses o semanas) y que te presente la evolución de los datos durante los diferentes años, antes de nada tendrás que crear una consulta de referencias cruzadas sobre el resultado de la consulta que quieras de las anteriores.
Una vez hecha esa consulta, la gráfica queda muy bien presentando los datos de un año comparados con los de otros.
Si no sabes cómo hacer la consulta de referencias cruzadas, dímelo y mañana te mando una hecha sobre la consulta que me digas de las anteriores (la base de datos donde preparé las consultas de antes no la tengo aquí).
Que yo sepa una gráfica sólo se funciona sobre una consulta o tabla.
Si quieres comparar el resultado de varias consultas en una gráfica, guarda el resultado de las consultas en una tabla y prepara la gráfica sobre la misma (una primera consulta de creación de tabla y después las consultas de datos anexados que quieras). Pero ten cuidado que los resultados de todas las consultas sean 'lógicamente' comparables (no incluyas los datos de clientes por países junto a las ventas por meses).
De todas formas lo normal es comparar los mismos datos referidos a diferentes años, para lo que sería más correcto la consulta de referencias cruzadas que te comentaba antes.
Si me gustaría que me mandaras el ejemplo, ya logre hacer la consulta por referencia ahora me falta hacer la comparación que te comento.
Te agradezco el tiempo prestado gracias
En principio, si tienes la consulta de referencias cruzadas, el gráfico te saldrá casi solo tomando los datos de dicha consulta.
Mañana te mando el código SQL de la consulta de referencias cruzadas sobre la consulta 2 (horas totales por meses) y te cuento cómo montar el gráfico.
Ok me parece perfecto, quedo en espera del ejemplo . gracias
Por lo que he visto no es necesaria la consulta de referencias cruzadas sino que haremos el gráfico directamente de la consulta 'consultaHorasMes'.
Para ello iremos a informes - nuevo - asistente para gráficos (seleccionando en la parte inferior la consulta 'consultaHorasMes') - Aceptar.
Pincharemos el botón ">>" porque queremos utilizar todos los campos para nuestro gráfico. A continuación pinchamos en "siguiente".
Elegimos el tipo de gráfico que vamos a crear. Pongamos un gráfico de líneas (también podría ser uno de barras, pero me gusta más este). Pinchamos en "siguiente".
Nos aparece una ventana para distribuir los datos en el gráfico. En la parte derecha tenemos un cuadro con los campos de nuestra consulta (año, mes y horasMes). A la izquierda un esquema de los datos del gráfico.
Comenzaremos pinchando a la izquierda sobre el cuadro que pone 'sumaDeAño' y lo llevaremos hasta la parte derecha (donde están los campos) para que nos quite el valor que ha puesto por defecto. Ahora tiene que aparecer 'Datos' en ese cuadro.
Arrastraremos el cuadro de 'HorasMes' de la parte derecha hasta el cuadro de 'Datos' que acabamos de dejar limpio. También llevaremos el cuadro de 'año' de la parte derecha hasta el cuadro de 'Series'. Y por último el cuadro de 'mes' hasta el que pone 'Ejes'.
Pinchando en 'siguiente' nos lleva a la ventana final para que pongamos titulo a nuestro gráfico. Al pulsar "finalizar" nos presentará el gráfico.
Normalmente crea el gráfico 'pequeñito', por lo que tendrás que entrar en el diseño del informe para agrandarlo y verlo mejor.
OJO: al entrar en el diseño verás un gráfico que no tiene nada que ver con el tuyo. Es el que te pone de muestra, pero al presentar el informe aparecerán tus datos correctamente.
¿Por lo que leo dices que esto es en un informe pero cuando esta en una forma es lo mismo? ¿Ayer estaba haciendo una gráfica y cuando ocupo el wizard me dice que solo acepta 6 datos como máximo
se puede modificar esta propiedad?
En un formulario es igual.
En este caso sólo tienes 3 datos: el año para las series, el mes para el eje inferior y las horas que es el dato a presentar.
Aunque sea en un formulario, sigue las indicaciones que te he puesto para un informe y te funcionará.
Hola nuevamente, tengo una duda hace unos días estaba haciendo un queries en access y elegí 2 y les puse oculap (click derecho propiedad ocultar) y ahora que estoy haciendo una moficiacaion ya no se como mostrarlos nuevamente,
¿Cómo hago para que aparezcan otra vez?
Gracias
Sencillo: menú "Herramientas" - "Opciones" y pones que te muestre los objetos ocultos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas