Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
比较两个数据集SQL SSRS 2005_Sql_Reporting Services_Reportingservices 2005 - Fatal编程技术网

比较两个数据集SQL SSRS 2005

比较两个数据集SQL SSRS 2005,sql,reporting-services,reportingservices-2005,Sql,Reporting Services,Reportingservices 2005,我在两台不同的服务器上有两个数据集。它们各自提取一列信息 我想构建一个报告,显示只出现在其中一个数据集中的行的值 从我所读到的内容来看,似乎我希望在SQL方面而不是在报告方面这样做;我不知道该怎么做 如果有人能解释一下这是怎么可能的,我将非常感激 您可以使用notexists子句来获取两个表之间的差异 SELECT Column FROM DatabaseName.SchemaName.Table1 WHERE NOT EXISTS ( SELEC

我在两台不同的服务器上有两个数据集。它们各自提取一列信息

我想构建一个报告,显示只出现在其中一个数据集中的行的值

从我所读到的内容来看,似乎我希望在SQL方面而不是在报告方面这样做;我不知道该怎么做


如果有人能解释一下这是怎么可能的,我将非常感激

您可以使用
notexists
子句来获取两个表之间的差异

SELECT
    Column
FROM
    DatabaseName.SchemaName.Table1
WHERE
    NOT EXISTS
    (
        SELECT
            Column
        FROM
            LinkedServerName.DatabaseName.SchemaName.Table2
        WHERE
            Table1.Column = Table2.Column --looks at equalities, and doesn't
                                          --include them because of the
                                          --NOT EXISTS clause
    )
这将显示
表1
中未出现在
表2中的行。您可以反转表名,以查找
表2中未出现在
表1
中的行

编辑:进行编辑以显示链接服务器的情况。此外,如果希望同时查看两个表中未共享的所有行,可以尝试以下方法

SELECT
    Column, 'Table1' TableName
FROM
    DatabaseName.SchemaName.Table1
WHERE
    NOT EXISTS
    (
        SELECT
            Column
        FROM
            LinkedServerName.DatabaseName.SchemaName.Table2
        WHERE
            Table1.Column = Table2.Column --looks at equalities, and doesn't
                                          --include them because of the
                                          --NOT EXISTS clause
    )

UNION

SELECT
    Column, 'Table2' TableName
FROM
    LinkedServerName.DatabaseName.SchemaName.Table2
WHERE
    NOT EXISTS
    (
        SELECT
            Column
        FROM
            DatabaseName.SchemaName.Table1
        WHERE
            Table1.Column = Table2.Column
    )

也可以使用左连接:

select a.* from tableA a
    left join tableB b
    on a.PrimaryKey = b.ForeignKey
where b.ForeignKey is null

此查询将返回tableA中所有在tableB中没有相应记录的记录。

如果您希望行正好出现在一个数据集中,并且每个表上都有匹配的键,则可以使用完全外部联接:

select *
from table1 t1 full outer join
     table2 t2
     on t1.key = t2.key
where t1.key is null and t2.key is not null or
      t1.key is not null and t2.key is null
where条件选择正好匹配一个的行

但是,这个查询的问题是,您会得到许多带有null的列。解决此问题的一种方法是在SELECT子句中逐个检查列

select coalesce(t1.key, t2.key) as key, . . . 
解决此问题的另一种方法是使用带有窗口函数的并集。此版本将所有行合并在一起,并统计该键出现的次数:

select t.*
from (select t.*, count(*) over (partition by key) as keycnt
      from ((select 'Table1' as which, t.*
             from table1 t
            ) union all
            (select 'Table2' as which, t.*
             from table2 t
            )
           ) t
     ) t
where keycnt = 1

这有一个附加列,指定值来自哪个表。它还有一个额外的列keycnt,其值为1。如果您有一个复合键,则只需替换为指定两个表之间匹配项的列列表。

问题在于它们不仅仅是不同的表。它们是完全不同的数据库和服务器。我不知道如何在一次SQL调用中连接到多个服务器。如果它们都是SQL server实例,您可以创建一个数据库,允许您跨服务器查询/比较这两个表。这就是我要找的。谢谢我刚刚创建了链接服务器,当它询问链接服务器名称时,它使用了IP(它询问了我在网络上用来引用它的名称),这会干扰我的sql调用吗?我可以这样使用它吗:[xxx.xxx.x.xxx].db.schema.table?
SELECT
    Column
FROM
    DatabaseName.SchemaName.Table1
WHERE
    NOT EXISTS
    (
        SELECT
            Column
        FROM
            LinkedServerName.DatabaseName.SchemaName.Table2
        WHERE
            Table1.Column = Table2.Column --looks at equalities, and doesn't
                                          --include them because of the
                                          --NOT EXISTS clause
    )