2011-10-21 30 views
6

Editar: Después de intentar el método COALESCE, ahora veo un problema donde los datos se repiten con los mismos datos para cada categoría de vataje. La columna 2 es en vataje. enter image description hereunir dos estructuras de tablas idénticas con datos diferentes

He creado dos tablas temporales, ambas con la misma estructura de tabla. En estas tablas, hay varias columnas que podrían tener los mismos valores, y luego algunas columnas de valores que tendrán diferentes números. Algunos de estos serán NULL en una columna y no nulos en otra. Quiero juntar todos los valores, y en las filas con el mismo sitio y planta me gustaría unir los valores.

Aquí es un ejemplo de lo que las dos mesas podría ser similar y el resultado que cabe esperar

Tabla 1:

SITE  PLANT   VALUE_1   VALUE 2 
S1  P1    54    66 
S1  P2    43    43 

TABLA 2:

SITE  PLANT   VALUE_1   VALUE_2 
S1  P1   33    43 
S2  P1   34    22 

RESULTADO:

SITE  PLANT   t1_VALUE_1 t1_VALUE_2 t2_VALUE_1  t2_VALUE2 
S1  P1   54   66   33    43 
S1  P2   43   43   NULL   NULL 
S2  P1   NULL   NULL   34    22 

Mi original los pensamientos serían una unión completa. Sin embargo, esto no funciona porque en su declaración de selección debe especificar dónde tomar las columnas, como sitio y planta; pero para seleccionar tanto t1.site como t2.site generará dos columnas. Lo más parecido que obtuve fue la siguiente consulta, sin embargo, cada vez que hay un resultado en S2 que tiene un sitio y una planta que no están en S1, recibe valores nulos para S1 y S2.

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site 
AND t1.plant = t2.plant 
+0

No utilice el marcado HTML. Use el ícono "formatear como código" para pegar tablas con espacios preservados. –

+0

@Tom - S1 y S2 no se enumeran como una columna o tabla. ¿A qué se refiere en realidad? –

Respuesta

1

Puede usar coalesce. Devolverá el primer valor no nulo de los parámetros.

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant, 
4

Se necesitan dos trucos para completar esta consulta. El primero es un FULL JOIN. Una unión completa le permitirá combinar ambas tablas e insertar nulos en cualquier tabla cuando no coincida con la condición de unión. El segundo es COALESCE, que le permitirá tomar la planta y el sitio de cualquiera de las tablas que proporcionen un registro para esta fila en los resultados.

SELECT Coalesce(t1.Site,t2.Site) As Site, COALESCE(t1.Plant, t2.Plant) As Plant, 
    t1.Value_1 As t1_Value_1, t1.Value_2 As t1_Value_2, 
    t2.Value_1 As t2_Value_1, t2.Value_2 As t2_Value_2 
FROM Table1 t1 
FULL JOIN Table2 t2 ON t1.Site = t2.Site AND t1.Plant = t2.Plant 
+0

Gracias por la entrada, necesito ser inteligente en la función de fusión. Por favor vea la pregunta actualizada – Tom

Cuestiones relacionadas