SQLServer2005中两个表的比较与合并
我有两个脚本,它们生成以下两个表(t1和t2)。 有没有办法把t1和t2合并成t3? 每个表的前5行在第一列(数字)中具有相同的值。 然而,在t1中,填充了列PreOpOrg和PreOpModality,但在t2中,填充了列PreOpOrg和PreOpModality,反之亦然。 因此,合并将使用每个表(t1和t2)中的非空值填充列。对于t1和t2中只出现在一个表中的行,它们应该出现在t3中,就好像正在尝试正常并集一样。 不幸的是,当我在SQL2005中工作时,脚本需要与SQL2000兼容。 非常感谢SQLServer2005中两个表的比较与合并,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有两个脚本,它们生成以下两个表(t1和t2)。 有没有办法把t1和t2合并成t3? 每个表的前5行在第一列(数字)中具有相同的值。 然而,在t1中,填充了列PreOpOrg和PreOpModality,但在t2中,填充了列PreOpOrg和PreOpModality,反之亦然。 因此,合并将使用每个表(t1和t2)中的非空值填充列。对于t1和t2中只出现在一个表中的行,它们应该出现在t3中,就好像正在尝试正常并集一样。 不幸的是,当我在SQL2005中工作时,脚本需要与SQL2000兼容。 非
--t1
Number DateOfBirth PreOpOrg PreOpModality PostOpOrg PostOpModality DiagDate
8643576344 01/04/1935 00:00:00 RBA11 2 NULL NULL 04/09/2012 00:00
2345680016 01/01/1960 00:00:00 RBA11 4 NULL NULL 11/11/2011 00:00
6955934252 20/01/1980 00:00:00 RBA11 4 NULL NULL 22/08/2012 00:00
2234582369 28/12/1940 00:00:00 RBA11 5 NULL NULL 02/11/2011 00:00
9477684368 01/02/1959 00:00:00 RBA11 5 NULL NULL 02/01/2014 00:00
--t2
Number DateOfBirth PreOpOrg PreOpModality PostOpOrg PostOpModality DiagDate
8643576344 01/04/1935 00:00:00 NULL NULL RBA11 2 04/09/2012 00:00
2345680016 01/01/1960 00:00:00 NULL NULL RBA11 2 11/11/2011 00:00
6955934252 20/01/1980 00:00:00 NULL NULL RN325 5 22/08/2012 00:00
2234582369 28/12/1940 00:00:00 NULL NULL RBA11 5 02/11/2011 00:00
9477684368 01/02/1959 00:00:00 NULL NULL RBA11 5 02/01/2014 00:00
0000001564 01/01/1970 00:00:00 NULL NULL RBA11 2 08/08/2012 00:00
4225127842 11/07/1948 00:00:00 NULL NULL RBA11 2 10/09/2011 00:00
0909093842 01/07/1957 00:00:00 NULL NULL RN325 5 26/08/2009 00:00
8528528855 05/12/1969 00:00:00 NULL NULL RBA11 5 25/10/2010 00:00
1000001367 05/05/1950 00:00:00 NULL NULL RBA11 5 08/04/2011 00:00
2234573513 30/11/1946 00:00:00 NULL NULL RN325 5 20/04/2011 00:00
1000001566 18/03/1951 00:00:00 NULL NULL RBA11 5 20/03/2012 00:00
0000001600 01/01/1970 00:00:00 NULL NULL RBA11 5 28/03/2013 00:00
1000001621 12/12/1950 00:00:00 NULL NULL RBA11 5 06/12/2013 00:00
--t3
Number DateOfBirth PreOpOrg PreOpModality PostOpOrg PostOpModality DiagDate
8643576344 01/04/1935 00:00:00 RBA11 2 RBA11 2 04/09/2012 00:00
2345680016 01/01/1960 00:00:00 RBA11 4 RBA11 2 11/11/2011 00:00
6955934252 20/01/1980 00:00:00 RBA11 4 RN325 5 22/08/2012 00:00
2234582369 28/12/1940 00:00:00 RBA11 5 RBA11 5 02/11/2011 00:00
9477684368 01/02/1959 00:00:00 RBA11 5 RBA11 5 02/01/2014 00:00
0000001564 01/01/1970 00:00:00 NULL NULL RBA11 2 08/08/2012 00:00
4225127842 11/07/1948 00:00:00 NULL NULL RBA11 2 10/09/2011 00:00
0909093842 01/07/1957 00:00:00 NULL NULL RN325 5 26/08/2009 00:00
8528528855 05/12/1969 00:00:00 NULL NULL RBA11 5 25/10/2010 00:00
1000001367 05/05/1950 00:00:00 NULL NULL RBA11 5 08/04/2011 00:00
2234573513 30/11/1946 00:00:00 NULL NULL RN325 5 20/04/2011 00:00
1000001566 18/03/1951 00:00:00 NULL NULL RBA11 5 20/03/2012 00:00
0000001600 01/01/1970 00:00:00 NULL NULL RBA11 5 28/03/2013 00:00
1000001621 12/12/1950 00:00:00 NULL NULL RBA11 5 06/12/2013 00:00
考虑到您的数据和在SQL 2000上运行的要求,我为您提供以下解决方案。
如果你遇到任何问题,请告诉我。为方便起见,我只从你的样品中添加了几条记录。如果您使用的是SQL Server 2008或更高版本,则可以按照说明使用合并函数
考虑到您的数据和在SQL 2000上运行的要求,我为您提供以下解决方案。
如果你遇到任何问题,请告诉我。为方便起见,我只从你的样品中添加了几条记录。如果您使用的是SQL Server 2008或更高版本,则可以按照说明使用合并函数
另一个解决方案是
SELECT
ISNULL(T1.Number, T2.NUMBER) AS Number
,ISNULL(T1.DateOfBirth, T2.DateOfBirth) AS DateOfBirth
,ISNULL(T1.PreOpOrg, T2.PreOpOrg) AS PreOpOrg
,ISNULL(T1.PreOpModality, T2.PreOpModality) AS PreOpModality
,ISNULL(T1.PostOpOrg, T2.PostOpOrg) AS PostOpOrg
,ISNULL(T1.PostOpModality, T2.PostOpModality) AS PostOpModality
,ISNULL(T1.DiagDate, T2.DiagDate) AS DiagDate
FROM T1
RIGHT JOIN T2
ON T1.Number = T2.Number
另一个解决方案是
SELECT
ISNULL(T1.Number, T2.NUMBER) AS Number
,ISNULL(T1.DateOfBirth, T2.DateOfBirth) AS DateOfBirth
,ISNULL(T1.PreOpOrg, T2.PreOpOrg) AS PreOpOrg
,ISNULL(T1.PreOpModality, T2.PreOpModality) AS PreOpModality
,ISNULL(T1.PostOpOrg, T2.PostOpOrg) AS PostOpOrg
,ISNULL(T1.PostOpModality, T2.PostOpModality) AS PostOpModality
,ISNULL(T1.DiagDate, T2.DiagDate) AS DiagDate
FROM T1
RIGHT JOIN T2
ON T1.Number = T2.Number
Mahmad Khoja-感谢您提供这个解决方案,它很有效,我已经实现了。关于coalesce函数,我认为您可以在SQL2000中使用它?请参阅Mahmad Khoja上的解释-感谢您提供此解决方案,它是有效的,我已经实现了它。关于coalesce函数,我认为您可以在SQL2000中使用它?请参见此处的说明