部分重叠数据的Sql Join

标签 sql tsql join

我从 3 个表(日期和数量)中检索数据,有些数据可能重叠但不确定哪些表。例如,有些日子可能会重叠
表 t1 和 t2 但不在 t3 中,
或 t2 和 t3 但不在 t1
或 t1 和 t3 但不在 t2

如果我执行完全连接,我最终会得到很多空值和三个不同的日期列。

如何让数据格式化: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

最佳答案

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  

关于部分重叠数据的Sql Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152530/

相关文章:

Sql Like 运算符匹配仅包含多个空格的列

sql - 我可以用 mysql 5.1 做数据透视吗?

sql - 如何循环遍历数据并将前一批与 SQL Server 中的当前批进行比较?

sql - PostgreSQL:如何使用连接编写查询?

MYSQL "every row excluded, but only once"加入

sql - 计算时间戳之间的营业时间

mysql - SQL 连接名称在结果的其余部分中丢失

sql - 如何在 T-SQL 中连接数字和字符串以格式化数字?

sql - TSQL - 动态创建表和插入

sql - 自然连接——关系理论和 SQL