Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Unir 2 Filas en Una (https://www.clubdelphi.com/foros/showthread.php?t=82824)

Cristhor1982 17-04-2013 16:55:24

Unir 2 Filas en Una
 
Amigos, tengo un problema, quiero unir los resultados de una consulta SQL, que me entrega

por ejemplo

CAMPO 1 CAMPO 2 CAMPO 3 CAMPO 4 TIPO FECHA
1111 17/04/2013 222 NOMBRE INGRESO 18/04/2013
1111 17/04/2013 222 NOMBRE SALIDA 19/04/2013

LO QUE QUIERO HACER ES QUE QUEDE ALGO ASI

CAMPO 1 CAMPO 2 CAMPO 3 CAMPO 4 TIPO FECHA TIPO FECHA
1111 17/04/2013 222 NOMBRE INGRESO 18/04/2013 SALIDA 19/04/2013.


SI PUDIESEN AYUDAR, DESDE YA MUCHAS GRACIAS

ElDioni 17-04-2013 18:34:41

Hola,

si te soy sincero no se si se podrá hacer a través de la propia consulta lo que pretendes, yo creo que no, pero si se me ocurre que puedes hacer un proceso intermedio para rellenar una tabla temporal intermedia donde coloques los datos como los quieras y sea esta la que muestras al final tras la consulta.

Saludos.

Cristhor1982 17-04-2013 19:07:20

Cita:

Empezado por ElDioni (Mensaje 458775)
Hola,

si te soy sincero no se si se podrá hacer a través de la propia consulta lo que pretendes, yo creo que no, pero si se me ocurre que puedes hacer un proceso intermedio para rellenar una tabla temporal intermedia donde coloques los datos como los quieras y sea esta la que muestras al final tras la consulta.

Saludos.

Hola ElDioni, en realidad, estoy tratando de hacer eso...pero, no lo logro!!! quizas con un ciclo que recorra la tabla dos veces,mmm en realidad no se, quizas la primera vez que llene con campos clave, luego los que quiero acomodar. No se no se me ocurre....:confused:

TOPX 17-04-2013 21:41:54

Ya depende del motor de base de datos y de la implementación real del problema pero, apegándome al ejemplo, yo lo haría con algo como:
Código SQL [-]
SELECT 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN TIPO ELSE NULL END) AS TIPO1,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN FECHA ELSE NULL END) AS FECHA1,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN TIPO ELSE NULL END) AS TIPO2,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN FECHA ELSE NULL END) AS FECHA2
FROM TABLA
GROUP BY 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4
-

fjcg02 18-04-2013 09:40:04

Y si tienes sólo INGRESO y SALIDA, yo haría esto:

Código SQL [-]
SELECT 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN FECHA ELSE NULL END) AS INGRESO,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN FECHA ELSE NULL END) AS SALIDA
FROM TABLA
GROUP BY 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4

Cuéntanos cómo te ha ido.

Saludos

Cristhor1982 18-04-2013 13:58:07

Cita:

Empezado por TOPX (Mensaje 458800)
Ya depende del motor de base de datos y de la implementación real del problema pero, apegándome al ejemplo, yo lo haría con algo como:
Código SQL [-]
SELECT 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN TIPO ELSE NULL END) AS TIPO1,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN FECHA ELSE NULL END) AS FECHA1,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN TIPO ELSE NULL END) AS TIPO2,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN FECHA ELSE NULL END) AS FECHA2
FROM TABLA
GROUP BY 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4
-

GRACIAS....Me funciono !!!!!muchas gracias , ahora solo debo poner un isnull(...), tratando de saber donde, pero ahi vamos gracias!!!te pasaste

Cristhor1982 18-04-2013 14:02:17

Cita:

Empezado por fjcg02 (Mensaje 458838)
Y si tienes sólo INGRESO y SALIDA, yo haría esto:

Código SQL [-]
SELECT 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN FECHA ELSE NULL END) AS INGRESO,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN FECHA ELSE NULL END) AS SALIDA
FROM TABLA
GROUP BY 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4

Cuéntanos cómo te ha ido.

Saludos

Gracias, al termino siendo mas o menos de la forma que indicas!!:)
FECHA_INGRESO, FECHA_SALIDA :D

SALUDOS

cloayza 18-04-2013 19:12:15

Amigo la solución que te dieron me dejo pensando y creo que lo mejor sería:

Alternativa 1:

Código SQL [-]
SELECT 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4,
  MAX(CASE WHEN TIPO = 'INGRESO' THEN FECHA ELSE NULL END) AS INGRESO,
  MAX(CASE WHEN TIPO = 'SALIDA' THEN FECHA ELSE NULL END) AS SALIDA
FROM DEMO
GROUP BY 
  CAMPO1, CAMPO2, CAMPO3, CAMPO4
Resultado Alternativa 1:
Cita:

CAMPO1 CAMPO2 CAMPO3 CAMPO4 INGRESO SALIDA
1111 17/04/2013 222 NOMBRE 18/04/2013 NULL
1111 18/04/2013 222 NOMBRE NULL 19/04/2013
Alternativa 2:
Código SQL [-]
SELECT
    TABLA.CAMPO1,
    TABLA.CAMPO2,
    TABLA.CAMPO3,
    TABLA.CAMPO4,
    TABLA.TIPO,
    TABLA.FECHA,
    TABLA2.TIPO,
    TABLA2.FECHA
FROM TABLA
     LEFT OUTER JOIN TABLA TABLA2 ON
                    (TABLA2.CAMPO1 = TABLA.CAMPO1) AND
                    (TABLA2.TIPO = 'SALIDA')
WHERE (TABLA.TIPO = 'INGRESO')
Resultado Alternativa 2:
Cita:

CAMPO1 CAMPO2 CAMPO3 CAMPO4 TIPO FECHA TIPO1 FECHA1
1111 17/04/2013 222 NOMBRE INGRESO 18/04/2013 SALIDA 19/04/2013
Es solo otra opinión...
Saludos cordiales


La franja horaria es GMT +2. Ahora son las 05:03:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi