Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Mostrar una consulta en varios campos. Ayuda

Estas en el tema de Mostrar una consulta en varios campos. Ayuda en el foro de Bases de Datos General en Foros del Web. Hola a todos. Estoy tratando de introducir datos referentes a los gastos de unos determinados cursos. Lo estoy haciendo a través de una tabla en ...
  #1 (permalink)  
Antiguo 08/04/2010, 07:36
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Mostrar una consulta en varios campos. Ayuda

Hola a todos.

Estoy tratando de introducir datos referentes a los gastos de unos determinados cursos. Lo estoy haciendo a través de una tabla en un subformulario dentro de un formulario del curso.

En la tabla, introduzco el concepto, el tipo (desplazamiento, parkings, comida, alojamiento, y varios), fecha y la cantidad.

Hasta aquí bien, lo que no se cómo hacer es para que pulsando un botón me saque otro formulario resumen o un informe, en el que me saque la suma de los desplazamientos de ese curso en un campo, la de las comidas en otro, ...etc...

Es decir:
Total de comidas: "tanto"
Total de parkings: "tanto
....

Alguien me puede echar una mano?

Gracias.
  #2 (permalink)  
Antiguo 10/04/2010, 13:51
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar una consulta en varios campos. Ayuda

A nadie se le ocurre nada?

Gracias.
  #3 (permalink)  
Antiguo 10/04/2010, 18:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar una consulta en varios campos. Ayuda

Cita:
Hasta aquí bien, lo que no se cómo hacer es para que pulsando un botón me saque otro formulario resumen o un informe, en el que me saque la suma de los desplazamientos de ese curso en un campo, la de las comidas en otro, ...etc...
Aquí tienes dos problemas diferentes:
1) Los formularios no son tema de Bases de Datos sino de programación de aplicaciones. Es decir que estás posteando la pregunta en el foro equivocado, ya que aquí las normas del foro no permiten resolver problemas ajenos a Bases de Datos (función de la sección Bases de Datos). Tienes que postear este asunto en el foro de tu lenguaje.
2) La consulta que puede devolverte un resumen de este tipo, si es asunto de BBDD, pero para poder darte una sintaxis mas o menos correcta deberías postear la estructura de las tablas relacionadas, a fin de darte algo menos genérico.
Con la info que das, solamente te puedo decir que para obtener ese listado detallado y discriminado por gastos lo que tienes que hacer es usar SUM() sobre los gastos y agrupar (GROUP BY) por tipo de gasto.
Pero para darte un mejor ejemplo preferiría esperar que postees la estructura que te digo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/04/2010, 04:46
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar una consulta en varios campos. Ayuda

Hola a todos.

Gracias por tu respuesta gnzsoloyo.

Acabo de poner esto para la consulta:
Código:
SELECT Ofertas_Cursos.nom_curso, Ofertas_Cursos.nom_cliente, Ofertas_Cursos.codigo, Ofertas_Cursos.provincia_curso, Ofertas_Cursos.fecha_inicio_curso, Ofertas_Cursos.fecha_fin_curso, gastos_curso.tipo, gastos_curso.concepto, gastos_curso.fecha, Sum(gastos_curso.cantidad) AS SumaDecantidad
FROM Ofertas_Cursos LEFT JOIN gastos_curso ON Ofertas_Cursos.codigo = gastos_curso.codigo
GROUP BY gastos_curso.tipo;
Pero me sale este mensaje de error:
Cita:
Ha intentado ejecutar una consulta que no incluye la expresión especificada 'nom_curso' como parte de una función de agregado
¿Qué es lo que no estoy haciendo bien?

Gracias.
  #5 (permalink)  
Antiguo 11/04/2010, 06:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar una consulta en varios campos. Ayuda

El error está dado por el DBMS que estás usando.
Motores como Oracle, SQL Server, DB2, etc., exigen que todos los campos declarados en el SELECT y que no estén siendo usados con funciones agregadas, deben estar forzosamente en el GROUP BY.
En tu caso:

Código SQL:
Ver original
  1. SELECT
  2.     O.nom_curso,
  3.     O.nom_cliente,
  4.     O.codigo,
  5.     O.provincia_curso,
  6.     O.fecha_inicio_curso,
  7.     O.fecha_fin_curso,
  8.     G.tipo,
  9.     G.concepto,
  10.     G.fecha,
  11.     SUM(G.cantidad) AS SumaDecantidad
  12. FROM Ofertas_Cursos O
  13.     LEFT JOIN gastos_curso G ON O.codigo = G.codigo
  14. GROUP BY G.tipo;

Como puedes apreciar, estas poniendo sólo el tipo de gasto, cuando en realidad debería ir:
Código SQL:
Ver original
  1. SELECT
  2.     O.nom_curso,
  3.     O.nom_cliente,
  4.     O.codigo,
  5.     O.provincia_curso,
  6.     O.fecha_inicio_curso,
  7.     O.fecha_fin_curso,
  8.     G.tipo,
  9.     G.concepto,
  10.     G.fecha,
  11.     SUM(G.cantidad) AS SumaDecantidad
  12. FROM Ofertas_Cursos O
  13.     LEFT JOIN gastos_curso G ON O.codigo = G.codigo
  14. GROUP BY
  15.     G.tipo, O.nom_curso,  O.nom_cliente,  
  16.     O.codigo, O.provincia_curso, O.fecha_inicio_curso,
  17.     O.fecha_fin_curso,  G.concepto, G.fecha;
La sentencia, tal como la planteas, es válida en MySQL, SQLite, y no sé si en Postgre, pero no en los otros mencionados.

No son errores precisamente, sino es la forma que los DBMS implementan SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 11/04/2010, 10:05
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar una consulta en varios campos. Ayuda

Pues no termina de salir.
He puesto lo que me has dicho:
Código:
SELECT O.nom_curso, O.nom_cliente, O.codigo, O.provincia_curso, O.fecha_inicio_curso, O.fecha_fin_curso, G.tipo, G.concepto, G.fecha, Sum(G.cantidad) AS SumaDecantidad
FROM Ofertas_Cursos O LEFT JOIN gastos_curso G
ON O.codigo = G.codigo
GROUP BY G.tipo, O.nom_curso, O.nom_cliente, O.codigo, O.provincia_curso, O.fecha_inicio_curso, O.fecha_fin_curso, G.concepto, G.fecha;
Pero me sigue sin agrupar por el tipo de gasto.
En la tabla de ejemplo tengo dos entradas de gastos de tipo aparcamiento y una de comida y me saca las tres entradas, cuando lo que busco es la suma de los 2 de tipo aparcamiento.

¿Como lo arreglo?
  #7 (permalink)  
Antiguo 11/04/2010, 11:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar una consulta en varios campos. Ayuda

El problema es que no estás discriminando cuáles tipos son los que debes sumar. Es decir: No estás poniendo el WHERE que permita esa restricción.
Si, por ejemplo, los dos tipos de aparcamiento (supongo que es lo que en mi país se denomina estacionamiento) fuesen los tipogasto 1 y 2; entonces lo que debes hacer es establecer que solamente sume esos casos y no el 3 (comida, supongamos):
Código SQL:
Ver original
  1. SELECT
  2.     O.nom_curso,
  3.     O.nom_cliente,
  4.     O.codigo,
  5.     O.provincia_curso,
  6.     O.fecha_inicio_curso,
  7.     O.fecha_fin_curso,
  8.     G.tipo,
  9.     G.concepto,
  10.     SUM(G.cantidad) AS SumaDecantidad
  11. FROM Ofertas_Cursos O
  12.     LEFT JOIN gastos_curso G ON O.codigo = G.codigo
  13. WHERE G.codigo IN(1,2)
  14. GROUP BY
  15.     G.tipo, O.nom_curso,  O.nom_cliente,  
  16.     O.codigo, O.provincia_curso, O.fecha_inicio_curso,
  17.     O.fecha_fin_curso,  G.concepto;
En el caso de querer solamente la suma total de aparcamientos sin discriminación de tipo, habría que eliminar del SELECT y del GROUP BY aquellos campos que discriminan los tipos:
Código SQL:
Ver original
  1. SELECT
  2.     O.nom_curso,
  3.     O.nom_cliente,
  4.     O.codigo,
  5.     O.provincia_curso,
  6.     O.fecha_inicio_curso,
  7.     O.fecha_fin_curso,
  8.     SUM(G.cantidad) AS SumaDecantidad
  9. FROM Ofertas_Cursos O
  10.     LEFT JOIN gastos_curso G ON O.codigo = G.codigo
  11. WHERE G.codigo IN(1,2)
  12. GROUP BY
  13.     O.nom_curso,  O.nom_cliente,  
  14.     O.codigo, O.provincia_curso, O.fecha_inicio_curso,
  15.     O.fecha_fin_curso;
Un detalle final: La fecha del gasto es irrelevante si lo que quieres el total del concepto, y lo único que hará es que se agreguen subtotales.

Finalmente: Hay una forma para obtener el total y los subtotales, pero para poder orientarte debería saber qué DBMS estás usando (cosa que no has mencionado)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/04/2010, 13:02
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar una consulta en varios campos. Ayuda

Ups! vaya, creía que lo había puesto al principio, habrá sido en la otra cuestión que tengo planteada en el foro.

Lo estoy haciendo en ACCESS 2007 y sigue sin salir:
Código:
SELECT O.nom_curso, O.nom_cliente, O.codigo, O.provincia_curso, O.fecha_inicio_curso, O.fecha_fin_curso, G.tipo, G.concepto, Sum(G.cantidad) AS SumaDecantidad
FROM Ofertas_Cursos O LEFT JOIN gastos_curso G
ON O.codigo = G.codigo
WHERE G.codigo IN (1,2)
GROUP BY G.tipo, O.nom_curso, O.nom_cliente, O.codigo, O.provincia_curso, O.fecha_inicio_curso, O.fecha_fin_curso, G.concepto;
Y ahora me dice que
Cita:
No coinciden los tipos de datos en la expresión de criterios.
  #9 (permalink)  
Antiguo 11/04/2010, 15:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar una consulta en varios campos. Ayuda

AGGGHHH.
Eso no es un DBMS, apenas es un manejador de tablas con intérprete de SQL agregado.
Las capacidades de Access en cuanto a SQL son limitadas, y hay que ver si la forma de consulta que yo te propongo (y que aceptan SQL Server, Oracle, DB2, MySQL, Postgre, Firebird, etc.) es compatible con ese intérprete.

El punto para resolver este dilema es saber si puede Access puede resolver condicionales del tipo propuesto (x IN (lista_de_valores))...

Verifica en el manual directamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 12/04/2010, 00:26
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar una consulta en varios campos. Ayuda

Ya, ya se que el ACCESS no vale un duro (aunque la version 2007 la han mejorado bastante) pero tenía que ser en ACCESS.
Echaré un vstazo al manual a ver si saco algo en claro, pero creo que no hay problema en ACCESS para usar esa sentencia.
De todas formas me suena rara. ¿Puedes explicarme que haces exactamente con la sentencia?:
Código:
WHERE G.codigo IN (1,2)
Lo digo porque el campo código es de tipo texto con un formato parecido a:
"PLA47190109AL" y no veo claro lo de IN (1,2)
  #11 (permalink)  
Antiguo 12/04/2010, 05:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar una consulta en varios campos. Ayuda

En los DBMS, la cláusula IN() compara un campo dado con una lista de valores que pueden ser o valores separados por comas o bien el resultado de una subconsulta.
En el segundo caso, la subconsulta sólo debe devolver una única columna.
Es uno de los modos más rapidos para resolver selecciones simples de valores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 12/04/2010, 08:11
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar una consulta en varios campos. Ayuda

No se si lo entiendo, entonces con
Código:
WHERE G.codigo IN (1,2)
Le estamos diciendo que g.codigo debe ser el valor 1 ó el valor 2???
Pues ese debe ser el fallo no? el código nunca será ese valor.
será del tipo "ttbt14210909SE"

En todo caso debería ser
WHERE G.codigo = O.codigo
no? Para que coincidan los gastos con el curso en cuestión no?
No se, no lo entiendo bien.
  #13 (permalink)  
Antiguo 12/04/2010, 09:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar una consulta en varios campos. Ayuda

Eso dependerá de la forma de codificar los gastos que tu hayas elegido.
Lo que me preguntaste es para qué servía el IN() y yo te respondí, y te dije en qué contextos y para qué se usa.
Fíjate si te sirve y adaptalo tu mismo a tus necesidades.
Por mi parte creo que te puede ser útil si Access lo interpreta bien, cosa que debes verificar en el manual.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 17/04/2010, 02:14
 
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Mostrar una consulta en varios campos. Ayuda

Muchísimas gracias por tu ayuda, aunque al final no lo he resuelto así, no me salía lo que yo quería, así que me he ido a lo sencillo y lo saco mediante un informe, agrupando por el tipo de gasto y calculándole el total a cada grupo.
Gracias.

Etiquetas: campos
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 15:36.