你的位置:首页 > 数据库

[数据库]SQL Server 2008 R2——使用FULL OUTER JOIN实现多表信息汇总


=================================版权声明=================================

版权声明:原创文章 谢绝转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

勿用于学术性引用。

勿用于商业出版、商业印刷、商业引用以及其他商业用途。                   

 

本文不定期修正完善。

本文链接:http://www.cnblogs.com/wlsandwho/p/5071967.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站站长,圣诞了,祝你们见到上帝。

=======================================================================

“为什么会写这么一些无聊又浅显的小博客呢?”

“因为这些都是我在企鹅群里回答的问题呀。把有代表性的写出来、记录一下,以后再遇到这些问题就不用回答了。多省事呀。”

=======================================================================

上问题。

看起来是年底了,要把不同的表里的数据进行汇总。可以猜测下是出库和入库的两个表,或者其他类似双生的东西。

既然事主敢打包票说不重复而且一一对应,那就按最简单的方法来吧。

事主没有提供主键,下文代码中的主键是我自己加的。

=======================================================================

 1 --by WLS 2 --20151224 3 --网络代码有风险复制粘贴须谨慎 4 USE tempdb 5 GO 6  7 IF OBJECT_ID (N't_AbyWLS', N'U') IS NOT NULL 8 DROP TABLE t_AbyWLS; 9 CREATE TABLE t_AbyWLS(id INTEGER PRIMARY KEY,MC NVARCHAR(5),S1 INTEGER)10 GO11 12 IF OBJECT_ID (N't_BbyWLS', N'U') IS NOT NULL13 DROP TABLE t_BbyWLS;14 CREATE TABLE t_BbyWLS(id INTEGER PRIMARY KEY,MC NVARCHAR(5),S2 INTEGER)15 GO16 17 GO18 19 INSERT INTO t_AbyWLS20 SELECT 1,'A',2321 UNION22 SELECT 2,'B',3423 UNION24 SELECT 3,'C',5625 GO26 27 INSERT INTO t_BbyWLS28 SELECT 1,'A',1129 UNION30 SELECT 2,'B',1231 UNION32 SELECT 3,'C',1333 UNION34 SELECT 4,'D',NULL35 UNION36 SELECT 5,'E',1437 GO38 39 SELECT * FROM t_AbyWLS40 GO41 42 SELECT * FROM t_BbyWLS43 GO44 45 SELECT a.id AS f1,a.mc AS f2,a.s1 AS f3,b.id AS f4,b.mc AS f5,b.s2 AS f6 FROM t_AbyWLS a FULL JOIN t_BbyWLS b ON a.id=b.id46 GO47 48 WITH TempFull49 AS50 (51 SELECT a.id AS f1,a.mc AS f2,b.id AS f4,b.mc AS f5,a.s1 AS f3,b.s2 AS f6 FROM t_AbyWLS a FULL JOIN t_BbyWLS b ON a.id=b.id52 )53 SELECT CASE WHEN f1 IS NULL THEN f4 ELSE f1 END AS A,54    CASE WHEN f2 IS NULL THEN f5 ELSE f2 END AS MC,55    f3 AS S1,56    f6 AS S257 FROM TempFull58 GO

没啥说的,基本上就是一个Full Outer Join。

=======================================================================

执行效果

=======================================================================