Ayuda SAP

Unir dos querys

Buenas tardes mi duda es algo simple, como puedo unir dos resultados de consultas tengo la consulta :

SELECT Total=(Price*Quantity), T1.[ItmsGrpCod], t0.* 
FROM IGE1 T0  
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode] 
WHERE T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167

Y la consulta

SELECT T1.[ResType],T0.*
FROM IGE1 T0  
INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]

Como puedo los dos resultados unirlos para que tuviera la columna ResType, ItmsGrpCod, Total agregadas a todas las columnas de la tabla IGE1 con los datos de los resultados respectivamente

Para unir 2 consultas debes usar UNION ALL, pero cada consulta debe tener la misma cantidad de campos y los tipos de datos de cada columna deben ser compatibles.

Ejemplo:

    SELECT Total=(Price*Quantity) , T1.[ItmsGrpCod], ' ' as ResType, T0.* 
    FROM IGE1 T0  
    INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode] 
    WHERE T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167
    UNION ALL
    SELECT  0  as  Total,  0  as  ItmsGrpCod,  T1.[ResType], T0.*
    FROM IGE1 T0  
    INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]
2 Me gusta

Muchas gracias ya estaba haciendo el union all y si me fije que me faltaban campos, el query termino quedando asi:

SELECT Total=(PriceQuantity), T1.[ItmsGrpCod], ‘’,T0.
FROM IGE1 T0
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
WHERE T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167

Union All

SELECT Total=(PriceQuantity), ‘’, T1.[ResType],T0.
FROM IGE1 T0
INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]

3 Me gusta

Tenia yo un problema parecido y con esta solución que le has dado lo puedo arreglar.

Muchas gracias por el aporte.

Angel.

1 me gusta

Diras que todo lo que se me atora te pregunto gabriel pero ya termine el otro reporte hice uno que tambien usaba query pero como vieron que ya le agarre la onda me pusieron otro mas dificil, tengo este query

SELECT T0.[DocEntry], T0.[ItemCode], T0.[IssuedQty], T0.[PlannedQty], Adicional = ( T0.[IssuedQty] - T0.[PlannedQty]) , T1.[ItemCode], T1.[ItemName], CAST(T1.[ItmsGrpCod] AS char), T1.[SalUnitMsr]
FROM WOR1 T0 
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
WHERE (T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167) AND  T0.[IssuedQty] > T0.[PlannedQty]
ORDER BY T0.[DocEntry], T1.[ItmsGrpCod]

El resultado me da 23 registros que son los excedentes, pero quiero agregarle el campo Price, de la Tabla IGE1 que se relaciona con ItemCode y con BaseRef, pero al hacer este codigo me duplica algunos articulos, no quiero usar union all porque se debe asignar a cada articulo su precio y hare otro query con los articulos de gastos y mano de obra para unirlos con union all

SELECT T0.[DocEntry], T0.[ItemCode], T0.[IssuedQty], T0.[PlannedQty], Adicional = ( T0.[IssuedQty] - T0.[PlannedQty]) , T1.[ItemCode], T1.[ItemName], CAST(T1.[ItmsGrpCod] AS char), T2.Price, T2.[UnitMSR]
FROM WOR1 T0 
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
INNER JOIN IGE1 T2 ON T0.[ItemCode] = T2.[ItemCode] AND T0.[DocEntry] = T2.[BaseRef]
WHERE (T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167) AND  T0.[IssuedQty] > T0.[PlannedQty]
ORDER BY T0.[DocEntry], T1.[ItmsGrpCod]

Resultado del primer query

Resultado del segundo query

@fernando_cort, Man, te voy a cobrar las horas de consultoria! Jajaja!
No vale, mira en ese caso Aplica la sentencia DISTINCT para que no repita los registros identicos.

SELECT  DISTINCT 
 T0.[DocEntry], T0.[ItemCode], T0.[IssuedQty], T0.[PlannedQty], Adicional = ( T0.[IssuedQty] - T0.[PlannedQty]) , T1.[ItemCode], T1.[ItemName], CAST(T1.[ItmsGrpCod] AS char), T2.Price, T2.[UnitMSR]
FROM WOR1 T0 
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
INNER JOIN IGE1 T2 ON T0.[ItemCode] = T2.[ItemCode] AND T0.[DocEntry] = T2.[BaseRef]
WHERE (T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167) AND  T0.[IssuedQty] > T0.[PlannedQty]
ORDER BY T0.[DocEntry], T1.[ItmsGrpCod]

De echo si estoy considerandote en la nomina, y use el query pero me dio 14 valores de mas sospecho que en donde esta uniendo de mas es en el >, mira esta es la tabla de resultado que me da

Ejecuta este a ver:

SELECT   T0.[DocEntry], T0.[ItemCode], T0.[IssuedQty], T0.[PlannedQty], Adicional = ( T0.[IssuedQty] - T0.[PlannedQty]) , T1.[ItemCode], T1.[ItemName], CAST(T1.[ItmsGrpCod] AS char), T2.Price, T2.[UnitMSR]
FROM WOR1 T0 
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
INNER JOIN (SELECT DISTINCT ItemCode, BaseRef, Price,UnitMSR  FROM IGE1 ) T2
                   ON T0.[ItemCode] = T2.[ItemCode] AND T0.[DocEntry] = T2.[BaseRef]
WHERE (T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167) AND  T0.[IssuedQty] > T0.[PlannedQty]
ORDER BY T0.[DocEntry], T1.[ItmsGrpCod]
1 me gusta

Me sigue trayendo datos de mas lo que estaba haciendo es un doble union all una estructura asi:

Select
WOR1
inner join IOTM

  UNION ALL

  WOR1
  inner join IGE1

UNION ALL

  WOR1
  inner join ORSC

  UNION ALL

  WOR1
  inner join IGE1

Se podra o es algo demaciado rebuscado?

o si unimos factores de IGE1

Select
WOR1
inner join IOTM

  UNION ALL

  WOR1
  inner join ORSC

UNION ALL

  WOR1
  inner join IGE1

Ya vi detalladamente las tablas y el problema es que un mismo articulo puede tener diferentes costos por el TC asi es que hace bastante dificil el relacionarlos asi es que se omitio el precio, muchas gracias ya me dieron otro reporte ahora mas entretenido asi que proximamente actualizare el post :smiley:

2 Me gusta