计数临时表返回的记录数-SQL Server

计数临时表返回的记录数-SQL Server,sql,sql-server,Sql,Sql Server,我的脚本如下 CREATE TABLE #t (Id int, Name varchar(10)) INSERT INTO #t VALUES (1, 'A') INSERT INTO #t VALUES (1, 'B') INSERT INTO #t VALUES (1, 'C') INSERT INTO #t VALUES (1, 'D') INSERT INTO #t VALUES (2, 'E') SELECT COUNT(0)FROM (SELECT COUNT(0) FROM #t

我的脚本如下

CREATE TABLE #t (Id int, Name varchar(10))
INSERT INTO #t VALUES (1, 'A')
INSERT INTO #t VALUES (1, 'B')
INSERT INTO #t VALUES (1, 'C')
INSERT INTO #t VALUES (1, 'D')
INSERT INTO #t VALUES (2, 'E')

SELECT COUNT(0)FROM (SELECT COUNT(0) FROM #t GROUP BY Id) a
但是我犯了个错误

Msg 8155,16级,状态2,第5行 没有为“A”的第1列指定列名


使用子查询时,所有列都需要指定名称:

SELECT COUNT(0)
FROM (SELECT COUNT(0) as cnt FROM #t GROUP BY Id
     ) a;
但是,写这篇文章的更简单方法是:

SELECT COUNT(DISTINCT id)
FROM #t;
事实上,这并不完全相同。您的版本将计数
NULL
值,但不计数。确切的等价物是:

SELECT COUNT(DISTINCT id) + MAX(CASE WHEN id IS NULL THEN 1 ELSE 0 END)
FROM #t;

使用子查询时,所有列都需要指定名称:

SELECT COUNT(0)
FROM (SELECT COUNT(0) as cnt FROM #t GROUP BY Id
     ) a;
但是,写这篇文章的更简单方法是:

SELECT COUNT(DISTINCT id)
FROM #t;
事实上,这并不完全相同。您的版本将计数
NULL
值,但不计数。确切的等价物是:

SELECT COUNT(DISTINCT id) + MAX(CASE WHEN id IS NULL THEN 1 ELSE 0 END)
FROM #t;