2012-02-05 10 views
5

Recupero datos de 3 tablas (fecha y cantidad), algunos datos pueden solaparse pero no está seguro de qué tablas. Por ejemplo, algunos días pueden solaparse en tablas t1 y t2, pero no en t3, o T2 y T3, pero no en t1 o T1 y T3, pero no en t2Sql Unir para datos parcialmente superpuestos

si realizo una completa uno a termino con mucha de nulos y tres columnas de fecha diferentes.

¿Cómo puedo obtener datos para formatear: date,qty1, qty2, gty3 donde [date] contendría todos los días desde 3 tablas? cero reemplazaría todos los valores nulos

07/02/2012 || 2 || 0 || 7 


CREATE TABLE t1 (
    [date] [nvarchar](10) 
    ,qtyt1 [int] 
) 

CREATE TABLE t2 (
    [date] [nvarchar](10) 
    ,qtyt2 [int] 
) 

CREATE TABLE t3 (
    [date] [nvarchar](10) 
    ,qtyt3 [int] 
) 


insert into t1 values ('05/02/2012', 2) 
insert into t1 values ('07/02/2012', 3) 
insert into t2 values ('06/02/2012', 4) 
insert into t2 values ('08/02/2012', 5) 
insert into t3 values ('07/02/2012', 7) 
insert into t3 values ('08/02/2012', 11) 


select * from t1 
full join t2 on t1.date = t2.date 
full join t3 on t2.date = t3.date 

Respuesta

5
SELECT COALESCE(t1.date, t2.date, t3.date) AS date, 
     qtyt1, 
     qtyt2, 
     qtyt3 
FROM t1 
     FULL JOIN t2 
     ON t1.date = t2.date 
     FULL JOIN t3 
     ON ISNULL(t2.date, t1.date) = t3.date 
+0

curioso para mezclar y se unen isnull ... – ErikE

+0

@ErikE - Verdadero. De forma predeterminada, 'ISNULL' a menos que haya más de 2 parámetros o alguna otra razón para preferir' COALESCE'. –

+0

funciona, gracias – witpo