3

我正在尝试编写一个连接语句来将以下三个数据集连接在一起。(这是使用 MS SQL Server)

设置 1
ID 日期 Col1
2011 年 1 月 1 日
2013 年 1 月 1 日

设置 2
ID 日期 Col2
2011 年 1 月 1 日 b1
15 年 1 月 1 日 b2

设置 3
ID 日期 Col3
15 年 1 月 1 日 c1
17 年 1 月 1 日 c2

组合套装
ID 日期 Col1 Col2 Col3
2011 年 1 月 1 日 a1 b1
2013 年 1 月 1 日
2015 年 1 月 1 日 b2 c1
17 年 1 月 1 日 c2       

我认为完全外部连接能够做到这一点,但我遇到了主要的跨产品问题。

4

3 回答 3

3

试试这个:

select coalesce(t1.date, t2.date, t3.date) date, col1, col2, col3 from table1 t1
full outer join table2 t2 on (t1.date = t2.date)
full outer join table3 t3 on (t2.date = t3.date)
于 2012-11-19T04:32:06.450 回答
1

SELECT ISNULL(a.ID,isnull(b.ID,c.ID)) ID,coalesce(a.dt, b.dt, c.dt) , Col1, Col2, Col3 FROM set1 a FULL OUTER JOIN set2 b ON a.dt = b.dt FULL OUTER JOIN set3 c ON b.dt= c.dt

于 2012-11-19T05:00:41.167 回答
1

根据您的数据集,您似乎想根据date列加入 3 个表。请注意,我在这里忽略了 ID 列,直到您阐明为什么所有 ID 都设置为 1。

SELECT ISNULL(set1.dt, ISNULL(set2.dt, set3.dt)) as 'Date', col1, col2, col3
FROM set1
FULL OUTER JOIN set2 ON CAST(set1.dt AS DATE) = CAST(set2.dt AS DATE)
FULL OUTER JOIN set3 ON CAST(set2.dt AS DATE) = CAST(set3.dt AS DATE)
于 2012-11-19T04:28:27.637 回答