Query unido con ALL agregarle campo de otra Tabla

Sigo con mis dudas de los Querys, tengo este query

SELECT Total=(Price*Quantity), CodGrupo = CAST(T1.[ResType] AS char) ,T0.*
FROM IGE1 T0
INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]

Union All
 
SELECT Total=(Price*Quantity),CodGrupo = CAST(T1.[ItmsGrpCod] AS char),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

Pero quiero agregarle una columna de @presupuesto_det, la columna DocEntry y presupuesto_det se liga con IGE1 por el campo IGE1.BaseEntry = @presupuesto_det.U_OF, con otra union no creo se pueda como podria hacerse la union ya de 4 tablas practicamente

Puedes hacer la union de cuantos querys quieras con la cantidad de tablas que sea, lo unico que hay que tener en cuenta es que cada consulta debe tener la misma cantidad de campos y los tipos de datos de cada columna deben ser compatibles.


SELECT Total=(Price*Quantity), CodGrupo = CAST(T1.[ResType] AS char) ,T2.[NuevoCampo],T0.*
FROM IGE1 T0
INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]
INNER JOIN [@presupuesto_det] T2 ON T0.BaseEntry = T2.U_OF

UNION ALL
 
SELECT Total=(Price*Quantity),CodGrupo = CAST(T1.[ItmsGrpCod] AS char),T2.[NuevoCampo],T0.*
FROM IGE1 T0
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
INNER JOIN [@presupuesto_det] T2 ON T0.BaseEntry = T2.U_OF
WHERE T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167


2 Me gusta

Pero mas bien al resultado de la UNION ALL quiero compararlo con la otra tabla para agregarle la columna que necesito

Asi?

    SELECT TS.*,T2.[NuevoCampo]
    FROM (  SELECT Total=(Price*Quantity), CodGrupo = CAST(T1.[ResType] AS char) ,T0.*
                  FROM IGE1 T0
                  INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]
                  UNION ALL
                  SELECT Total=(Price*Quantity),CodGrupo = CAST(T1.[ItmsGrpCod] AS char),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 ) TS
    INNER  JOIN [@presupuesto_det] T2 ON TS.BaseEntry = T2.U_OF
1 me gusta

Si funciona pero de los 4075 resultados que deberia de dar da 7mil casi lo duplica

SELECT Total=(Price*Quantity), CodGrupo = CAST(T1.[ResType] AS char) , T0.BaseEntry
FROM IGE1 T0
INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]

UNION ALL
 
SELECT Total=(Price*Quantity),CodGrupo = CAST(T1.[ItmsGrpCod] AS char), T0.BaseEntry
FROM IGE1 T0
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
WHERE T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167

ORDER BY T0.BaseEntry, CodGrupo

Asi lo modifique

SELECT TS.*, T2.[DocEntry]
    FROM (SELECT Total=(Price*Quantity), CodGrupo = CAST(T1.[ResType] AS char) , T0.BaseEntry
    FROM IGE1 T0
    INNER JOIN ORSC T1 ON T0.[ItemCode] = T1.[VisResCode]

    UNION ALL
 
    SELECT Total=(Price*Quantity),CodGrupo = CAST(T1.[ItmsGrpCod] AS char), T0.BaseEntry
    FROM IGE1 T0
    INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode]
    WHERE T1.[ItmsGrpCod] = 162 OR T1.[ItmsGrpCod] =164 OR T1.[ItmsGrpCod] = 167) TS
JOIN [dbo].[@PRESUPUESTO_DET] T2 ON TS.BaseEntry = T2.U_OF