Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   Mostrar una consulta en varios campos. Ayuda (http://www.forosdelweb.com/f21/mostrar-consulta-varios-campos-ayuda-795351/)

ErPiloto 08/04/2010 07:36

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.

ErPiloto 10/04/2010 13:51

Respuesta: Mostrar una consulta en varios campos. Ayuda
 
A nadie se le ocurre nada?

Gracias.

gnzsoloyo 10/04/2010 18:20

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.

ErPiloto 11/04/2010 04:46

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.

gnzsoloyo 11/04/2010 06:44

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.

ErPiloto 11/04/2010 10:05

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?

gnzsoloyo 11/04/2010 11:12

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)

ErPiloto 11/04/2010 13:02

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.

gnzsoloyo 11/04/2010 15:20

Respuesta: Mostrar una consulta en varios campos. Ayuda
 
AGGGHHH. :borracho: :borracho: :borracho:
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.

ErPiloto 12/04/2010 00:26

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)

gnzsoloyo 12/04/2010 05:03

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.

ErPiloto 12/04/2010 08:11

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.

gnzsoloyo 12/04/2010 09:26

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.

ErPiloto 17/04/2010 02:14

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.


La zona horaria es GMT -6. Ahora son las 00:32.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2024, Jelsoft Enterprises Ltd.