计算表中的所有不同记录

时间:2017-05-10 07:44:51

标签: sql sql-server

我需要使用单个查询计算表名中的所有不同记录,并且不使用任何子查询。

我的代码是

select count ( distinct *) from table_name

它出错了:

  

'*'附近的语法不正确。

我正在使用Microsoft SQL Server

7 个答案:

答案 0 :(得分:1)

试试这个 -

SELECT COUNT(*)
FROM 
    (SELECT DISTINCT * FROM [table_name]) A

答案 1 :(得分:0)

我担心如果你不想使用子查询,实现这一点的唯一方法是用表中列的串联替换*

select count(distinct concat(column1, column2, ..., columnN))
from   table_name

为避免不良行为(如1和31的串联等于13和1的串联),您可以添加合理的分隔符

select count(distinct concat(column1, '$%&£', column2, '$%&£', ..., '$%&£', columnN)
from   table_name

答案 2 :(得分:0)

您可以使用CTE。

 ;WITH CTE AS
  (
  SELECT DISTINCT * FROM TableName
  )
  SELECT COUNT(*) 
  FROM CTE

希望此查询能够满足您的需求。

答案 3 :(得分:0)

正如其他人所提到的,您不能将DISTINCT*一起使用。最好使用列名而不是*,就像表的唯一键/主键一样。

SELECT COUNT( DISTINCT id )
  FROM table

答案 4 :(得分:0)

select distinct Name , count(Name) from TableName
group by Name
having count(Name)=1
select @@rowcount

答案 5 :(得分:0)

我遇到了同样的问题,涉及到有多个表连接的查询,我不能简单地执行 count(distinct ) 或 count(distinct alias.)。 我的解决方案是创建一个由我关心的关键列组成的字符串并对其进行计数。

SELECT Count(DISTINCT person.first || '~' || person.last)
from person;

答案 6 :(得分:-1)

如果您想使用DISTINCT关键字,则需要指定要在哪些基础上获取不同记录的列名。

示例:

SELECT count(DISTINCT Column-Name) FROM table_name