2012-02-05 6 views
5

Recupero i moduli di dati 3 tabelle (data e qtà), alcuni dati potrebbero sovrapporsi ma non sono sicuri su quali tabelle. Per esempio qualche giorno possono sovrapporsi in tabelle t1 e t2, ma non in t3, o T2 e T3, ma non in t1 o T1 e T3, ma non in t2Sql Join per dati parzialmente sovrapposti

Se eseguire l'raggiungo io alla fine con un sacco di null e tre colonne di date diverse.

Come è possibile ottenere i dati da formattare: dove [date] conterrà tutti i giorni da 3 tabelle? Zero dovrebbe sostituire tutti i valori nulli

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 

risposta

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 di mescolare fondono e isnull ... – ErikE

+0

@ErikE - Vero. Per impostazione predefinita è 'ISNULL' a meno che non ci siano più di 2 parametri o qualche altra ragione per preferire' COALESCE'. –

+0

funziona, grazie – witpo