从两个表中选择计数而不计算重复的列[关闭]

问题描述 投票:-3回答:2

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

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

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

c# sql sql-server
2个回答
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
投票

您似乎想要计算两个表的并集中的不同主键:

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;
© www.soinside.com 2019 - 2024. All rights reserved.