从几个表中选择COUNT(DISTINCT [name])

ahm*_*md0 6 sql sql-server select count distinct

我可以从一个表中的列执行以下SQL Server选择不同(或非重复名称),如下所示:

SELECT COUNT(DISTINCT [Name]) FROM [MyTable]
Run Code Online (Sandbox Code Playgroud)

但是,如果我有多个表(所有这些表都包含名为[Name]的名称字段),我需要知道两个或多个表中非重复名称的数量.

如果我运行这样的事情:

SELECT COUNT(DISTINCT [Name]) FROM [MyTable1], [MyTable2], [MyTable3]
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,"不明确的列名'名称'".

PS.所有三个表[MyTable1],[MyTable2],[MyTable3]都是之前选择的产物.

OMG*_*ies 18

澄清后,使用:

  SELECT x.name, COUNT(x.[name])
    FROM (SELECT [name]
            FROM [MyTable]
          UNION ALL
          SELECT [name]
            FROM [MyTable2]
          UNION ALL
          SELECT [name]
            FROM [MyTable3]) x
GROUP BY x.name
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,请使用:

  SELECT x.name, COUNT(DISTINCT x.[name])
    FROM (SELECT [name]
            FROM [MyTable]
          UNION ALL
          SELECT [name]
            FROM [MyTable2]
          UNION ALL
          SELECT [name]
            FROM [MyTable3]) x
GROUP BY x.name
Run Code Online (Sandbox Code Playgroud)

UNION将删除重复; UNION ALL不会,而且速度更快.

  • @ ahmd0 - 区分大小写基于您的服务器级排序规则设置. (2认同)
  • 分组键上的`COUNT(DISTINCT ...)`总是会产生`1`. (2认同)

bob*_*obs 5

编辑:看到最近的评论后不得不改变.

这会给你你想要的吗?这会在合并所有表中的行后为每个人提供计数.

SELECT [NAME], COUNT(*) as TheCount
FROM
    (
     SELECT [Name] FROM [MyTable1]
     UNION ALL
     SELECT [Name] FROM [MyTable2]
     UNION ALL
     SELECT [Name] FROM [MyTable3]
     ) AS [TheNames]
GROUP BY [NAME]
Run Code Online (Sandbox Code Playgroud)