2012-02-05 10 views
5

Pobieram dane z tabel 3 (data i qty), niektóre dane mogą się nakładać, ale nie są pewne, które tabele. Na przykład kilka dni mogą się pokrywać w tabele t1 i t2, ale nie w t3, lub T2 i T3, ale nie w t1 lub T1 i T3, ale nie w t2Sql Dołącz do częściowo zachodzących na siebie danych

Gdybym wykonać pełnego złączenia I skończyć z partii wartości zerowych i trzech różnych kolumn daty.

Jak mogę uzyskać dane do sformatowania: date,qty1, qty2, gty3 gdzie [date] zawierałoby wszystkie dni z 3 tabel? Zero zastąpi wszystkie wartości null

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 

Odpowiedz

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

Ciekawy mieszać COALESCE i IsNull ... – ErikE

+0

@ErikE - True. Domyślam się 'ISNULL', chyba że więcej niż 2 parametry lub inny powód do preferowania' COALESCE'. –

+0

to działa, dziękuję – witpo