2012-02-05 64 views
5

我检索数据表格3个表格(日期和数量),有些数据可能会重叠,但不确定哪些表。例如一些日子可能 表T1和T2重叠,但不是在T3, 或T2和T3但不是在T1 或T1和T3但不是在T2Sql加入部分重叠数据

如果我执行一次完整参加我结了很多的空值和三个不同的日期列。

我怎样才能得到数据格式: date,qty1, qty2, gty3其中[date]将包含所有日期形式3表? 零点将取代所有空值

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 

回答

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

好奇混合结合并ISNULL ... – ErikE 2012-02-05 20:29:54

+0

@ErikE - 真。我默认为'ISNULL',除非有2个以上的参数或者其他一些理由来选择'COALESCE'。 – 2012-02-05 20:32:15

+0

它的工作原理,谢谢 – witpo 2012-02-05 20:32:19