Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLServer2005中两个表的比较与合并_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

SQLServer2005中两个表的比较与合并

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和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中使用它?请参见此处的说明