SQL - Consultas agrupadas

   
Vista:

Consultas agrupadas

Publicado por Fh (3 intervenciones) el 15/10/2014 18:40:49
Buenas tardes, a ver si alguien es capaz de ayudarme.

Tengo una tabla con varios campos, campo1, campo2, campo3, campo4 y campo5.

La cuestión es que los datos se agrupan de la siguiente forma. Supongamos que tengo dos filas

Primera fila con datos en campo1, campo2, campo3 y campo4.
Segunda fila con datos en campo1, campo2, campo3 y campo5.

En ambas filas campo1, campo2, campo3 son iguales.

Necesito realizar una consulta en la que en una sola fila muestre todos los campos. Es decir campo1, campo2, campo3,
campo4 (De la primera fila) y campo5 (de la segunda fila)

¿Como puedo hacer la consulta con sentencias sql?

Gracias,
Quizás no me haya explicado del todo bien, si no lograís entenderme intentaré volver a explicarlo.


Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consultas agrupadas

Publicado por leonardo_josue (877 intervenciones) el 15/10/2014 19:34:54
Hola Fh:

Cometes el mismo error que muchos otros en este mismo foro, y es que no proporcionas toda la información que necesitamos para poder darte una respuesta puntual.

1. ¿Qué motor de BD's estás utilizando?, aunque la mayoría está basado en SQL, existen diferencias sintácticas muy importantes entre cada uno de ellos...
2. ¿De qué tipo de datos son tus campos?, es muy diferente tratar con datos numéricos a tratar con datos varchar.
3. Siempre habrá dos y solo dos registros para "agrupar", o existen casos en donde exista 1 solo o más de dos. Si fuera el caso cómo debería de darle tratamiento.
4. ¿Qué pasa si en ambas filas hay valor para los campos 4 y 5? ¿se debería tomar siempre el primero?, ¿el último, ambos, ninguno?
5. ¿Qué pasa si en ambas filas NO HAY VALOR en los campos 4 y 5?, ¿se queda sin valor?
6. ¿Qué pasa si en la primer fila no hay valor en los campos 4 y 5, pero en la segunda si?, ¿Se toman los valores de la segunda fila?

Como vez, son muchas las variantes que pueden existir, y dependiendo de esto hay varias formas para obtener lo que quieres... y dependiendo de lo que respondas depende también las formas en las que puedes resolver tu problema

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas agrupadas

Publicado por Fh (3 intervenciones) el 15/10/2014 19:49:36
HOla Leo

Antes de nada mil gracias por tu rápida respuesta. A ver si te lo puedo dejar un poco más claro.

1- Estoy utilizando mysql con phpmyadmin.

2- campo1, campo4 y campo5 son INT, campo2, campo3 son varchar.

3- Puede darse el caso de que haya 2.
O el caso de que haya solo uno, es decir una fila que contenga campo4 o campo5.

4- En teoria y dado que los datos vienen exportados de un programa externo (son datos contables) nunca debe haber ninguna fila que contenga campo4 y campo5.

5- En al menos uno de los campos tiene que haber valor.
Si solo existe una fila y tiene valor en campo4, el campo5 del resultado quedaría vacío.

6- No puede haber filas sin campo4 o campo5, ni ninguna que tenga ambos valores.


Espero haber podido aclararte un poco la consulta.

Mil gracias,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas agrupadas

Publicado por leonardo_josue (877 intervenciones) el 15/10/2014 20:07:54
Hola de nuevo Fh:

Tal como comenté en el post pasado, hay varias formas de resolver esto... una de ellas, y creo que sería la más sencilla, sería "jugar" con la función MAX para poder agrupar los registros, observa este ejemplo:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM tabla1;
+--------+--------+--------+--------+--------+
| campo1 | campo2 | campo3 | campo4 | campo5 |
+--------+--------+--------+--------+--------+
| uno    | one    | un     | eins   | NULL   |
| uno    | one    | un     | NULL   | ichi   |
| dos    | two    | deux   | zwei   | NULL   |
| tres   | three  | trois  | NULL   | drei   |
+--------+--------+--------+--------+--------+
4 rows in set (0.00 sec)

si observas, existen dos registros para la los valores de UNO, en una existe un valor en el campo4 y en otra fila, en el campo5. Además coloco otras dos filas donde existen valores sólo en una de las dos... entonces, si hacemos un MAX(campo4) y MAX(campo5) y agrupamos por los tres primeros campos (QUE SON COMUNES), entonces podemos obtener un sólo registro con toda la información, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT campo1, campo2, campo3, MAX(campo4) campo4, MAX(campo5) campo5
    -> FROM tabla1
    -> GROUP BY campo1, campo2, campo3;
+--------+--------+--------+--------+--------+
| campo1 | campo2 | campo2 | campo4 | campo5 |
+--------+--------+--------+--------+--------+
| uno    | one    | un     | eins   | ichi   |
| dos    | two    | deux   | zwei   | NULL   |
| tres   | three  | trois  | NULL   | drei   |
+--------+--------+--------+--------+--------+
3 rows in set (0.01 sec)

Esta es una manera "tramposa" de hacer uso de una función de agrupación, pero creo que te puede servir. OJO, esta sólo sirve como te comenté para el caso de que sólo existan valores en una y otra columna... si hay alguna otra combinación, el resultado puede no ser el esperado. En el ejemplo puse todos los valores como varchar, pero en realidad no afecta el que tengas algunos de tipo numérico,

Dale un vistazo para ver si es lo que necesitas, cualquier otra cosa, la comentas en el foro para poder revisarla.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consultas agrupadas

Publicado por fh (3 intervenciones) el 15/10/2014 20:14:29
HOla Leo...

En principio funciona tal y como me has indicado, mil gracias por tu ayuda.

Seguiré probando por que no es el resultado final hay otras secuencias que tengo que realizar.


Pero por ahora perfecto, muchas gracias por tu ayuda.

Un abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar