从两个表中选择Count而不计算具有重复的列

时间:2018-03-05 10:46:47

标签: c# sql sql-server

我在SQL Server数据库中有两个表。这些表具有相同的列,我们可以说它是一个副本 - 我使用一个用于存档数据,另一个用于当前数据的使用。

存档表没有主键,因为有时可能会有重复,有时可能会在当前表中找到主键,并在存档表中找到副本。

我想要一个SELECT语句来计算两个表中的列数而不计算主键的重复,因为第一个表中的主键可能在第二个表中找到两次或更多次

2 个答案:

答案 0 :(得分:2)

做一些像:

SELECT COUNT(B.*) NO_ROWS
FROM 
   (SELECT <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>
   FROM 
   (SELECT <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>
      FROM <CURRENT_TABLE>
    UNION ALL
    SELECT <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>
      FROM <ARCHIVE_TABLE>
   ) A
   GROUP <ALL COLUMNS IN BOTH TABLES EXCEPT THE ID>) B;

所有列上的grouping将消除重复。

答案 1 :(得分:1)

您似乎想要从两个表的联合统计不同的主键:

select count(distinct pk)
from
(
  select pk from table_current
  union all
  select pk from table_archive
) both_tables;

或者,您可以构建一个不同的联合,然后只计算其记录:

select count(*)
from
(
  select pk from table_current
  union
  select pk from table_archive
) both_tables;