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

[SOLUCIONADO] Extraer informacion de dos consultas en un solo registro

Estas en el tema de Extraer informacion de dos consultas en un solo registro en el foro de SQL Server en Foros del Web. Saludos mis estimados! Veran, quisiera pedir de su apoyo para realizar esta consulta. Actualmente tengo una tabla llamada Inventory_Trans, en la cual guardo ordenes de ...
  #1 (permalink)  
Antiguo 08/10/2013, 20:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Extraer informacion de dos consultas en un solo registro

Saludos mis estimados!

Veran, quisiera pedir de su apoyo para realizar esta consulta.

Actualmente tengo una tabla llamada Inventory_Trans, en la cual guardo ordenes de trabajo de produccion y dentro de dichas ordenes existen dos tipos de datos, los cuales son: Recibos y Emisiones. Pero la cuestion es que no se como extraerlo para hacer un solo registro.

Código SQL:
Ver original
  1. -- Extraigo El Ultimo Recibo.
  2. SELECT W.base_id OT, MAX(Inv.transaction_date) fecha
  3. FROM work_order W
  4.  LEFT OUTER JOIN inventory_trans Inv
  5.           ON W.base_id = Inv.workorder_base_id
  6.           WHERE W.create_date BETWEEN '24/12/12' AND '24/12/12' AND
  7.           Inv.CLASS ='R'
  8.           GROUP BY W.base_id,
  9.  
  10. -- Extraigo La Ultima Emision.
  11. SELECT W.base_id OT, MAX(Inv.transaction_date) fecha
  12. FROM  work_order W
  13.        LEFT OUTER JOIN inventory_trans Inv
  14.           ON W.base_id = Inv.workorder_base_id
  15.           WHERE W.create_date BETWEEN '24/12/12' AND '24/12/12' AND
  16.           Inv.CLASS ='I'
  17.           GROUP BY W.base_id
[/CODE]

En estos select, extraigo los recibos y las emisiones, pero la cuestion es que aveces no encuentra una orden y es por el condicinonte Inv.CLASS =' '

Ahora la pregunta seria, ¿como poder extraer esta informacion por aparte, por los condicionantes que tengo que usar y a la vez mostrarlo en un solo registro?

El resultado que busco, mas o menos con esta consulta es por ejemplo asi:

Código:
Orden              fecha_ult_emision             fecha_ult_recibo
987                     01/01/13                        16/08/13
765                     14/09/13                        23/11/13
Tambien, habia pensado en otra forma pero no me funciono, pero se las dejo y tal vez sirve de algo.


Código SQL:
Ver original
  1. -- SELECT PARA VER ULTIMOS MOVIMIENTOS.
  2. SELECT OT.Orden, OT.Part_Id, OT.STATUS, OT.Close_Date, OT.Costed_Date,
  3. R.fecha Ultimo_Recibo, I.fecha Ultima_Emision FROM
  4. -- Extraigo las OT a Revisar.
  5. (SELECT base_id Orden, part_id, STATUS, close_date, costed_date
  6.  FROM Work_Order WHERE create_date BETWEEN '01/08/13' AND '31/08/13' AND base_id IS NOT NULL
  7.  GROUP BY base_id, part_id, STATUS, close_date, costed_date ) OT,
  8. -- Extraigo El Ultimo Recibo.
  9. (SELECT W.base_id OT, Inv.class, MAX(Inv.transaction_date) fecha
  10. FROM inventory_trans Inv, work_order W WHERE W.base_id = Inv.workorder_base_id AND
  11. W.create_date BETWEEN '01/08/13' AND '31/08/13' AND Inv.CLASS ='R'
  12. GROUP BY W.base_id, Inv.class) R,
  13. -- Extraigo La Ultima Emision.
  14. (SELECT W.base_id OT, Inv.class, MAX(Inv.transaction_date) fecha
  15. FROM inventory_trans Inv, work_order W WHERE W.base_id = Inv.workorder_base_id AND
  16. W.create_date BETWEEN '01/08/13' AND '31/08/13' AND CLASS ='I'
  17. GROUP BY W.base_id, Inv.class) I
  18. ORDER BY OT.orden

Este de aqui, es un solo select que contiene selects anidados!

[/CODE]


Espero me haya dado a entender, y puedan ayudar!

Desde ya gracias por su ayuda!

Última edición por gnzsoloyo; 10/10/2013 a las 20:34 Razón: Muy mal etiquetado.
  #2 (permalink)  
Antiguo 09/10/2013, 07:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Extraer informacion de dos consultas en un solo registro

primero, te recomiendo usar left join en lugar de left outer join por performance, segundo ya probaste con union?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/10/2013, 15:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Extraer informacion de dos consultas en un solo registro

Saludos!

Veran, en la busqueda de como poder armar mi consulta SQL, encontre una forma que me parece viable, pero no se si sea posible e incluso me da problemas en el IDE, me gustaria saber si me podrian ayudar al respecto.
Código SQL:
Ver original
  1. SELECT W.base_id AS work_order_id, R.transaction_date AS last_receipt_date
  2. FROM
  3. work_order W
  4.   LEFT JOIN
  5. (
  6.   SELECT TOP 1
  7.         I.workorder_base_id, I.transaction_date
  8.   FROM
  9.       inventory_trans I
  10.   WHERE
  11.       I.workorder_base_id = W.base_id
  12.       AND I.CLASS ='R'
  13.   ORDER BY
  14.   I.transaction_date DESC
  15.  ) R ON W.base_id = R.workorder_base_id
[/CODE]

El error que me da, es el siguiente!
Código:
SQL Server Database Error: El prefijo de columna 'W' no coincide 
con un nombre de tabla o con un alias usado en la consulta.

Última edición por gnzsoloyo; 10/10/2013 a las 20:33 Razón: Muy mal etiquetado.
  #4 (permalink)  
Antiguo 10/10/2013, 15:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Extraer informacion de dos consultas en un solo registro

prueba con:

SELECT W.base_id AS work_order_id, R.transaction_date AS last_receipt_date
FROM
work_order W
LEFT JOIN
(
SELECT TOP 1
I.workorder_base_id, I.transaction_date
FROM
inventory_trans I
WHERE
I.workorder_base_id = W.base_id
AND I.CLASS ='R'
ORDER BY
I.transaction_date DESC
) R ON (W.base_id = R.workorder_base_id)

saludos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/10/2013, 20:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Extraer informacion de dos consultas en un solo registro

Gracias por la ayuda mis estimados, este foro es la ley. Encontre muy buena ayuda al respecto y he creado la consulta y la comparto con ustedes por si le sirve a alguien mas.

Código SQL:
Ver original
  1. SELECT W.base_id AS work_order_id, W.part_id, W.STATUS, W.Close_Date, W.Costed_Date,
  2. R.transaction_date AS last_receipt_date, E.transaction_date AS last_emision_date,
  3. M.transaction_date AS last_mod_date
  4. FROM
  5. work_order W
  6. LEFT JOIN
  7. (
  8.   SELECT
  9.         I.workorder_base_id, MAX(I.transaction_date) transaction_date
  10.   FROM
  11.       inventory_trans I, work_order W
  12.   WHERE
  13.       I.workorder_base_id = W.base_id
  14.       AND I.CLASS ='R'
  15.   GROUP BY I.workorder_base_id
  16.  ) R ON W.base_id = R.workorder_base_id
  17.  LEFT JOIN
  18. (
  19.   SELECT
  20.         I.workorder_base_id, MAX(I.transaction_date) transaction_date
  21.   FROM
  22.       inventory_trans I, work_order W
  23.   WHERE
  24.       I.workorder_base_id = W.base_id
  25.       AND I.CLASS ='I'
  26.   GROUP BY I.workorder_base_id
  27.  ) E ON W.base_id = E.workorder_base_id
  28.  LEFT JOIN
  29.  (
  30.    SELECT
  31.       L.workorder_base_id, MAX(L.transaction_date) transaction_date  
  32.    FROM
  33.       labor_ticket L, work_order W
  34.    WHERE
  35.       W.base_id = L.workorder_base_id
  36.       AND L.TYPE = 'R'
  37.    GROUP BY L.workorder_base_id
  38.    ) M ON W.base_id = M.workorder_base_id
  39. GROUP BY W.base_id, R.transaction_date, E.transaction_date, M.transaction_date,
  40. W.part_id, W.STATUS, W.Close_Date, W.Costed_Date ORDER BY W.base_id
[/CODE]

Saludos y gracias por todo!

Última edición por gnzsoloyo; 10/10/2013 a las 20:32 Razón: Muy mal etiquetado.

Etiquetas: fecha, informacion, registro, select, tabla
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 06:28.