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

时间:2016-03-03 12:51:47

标签: 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 GROUP BY Id) a

但是我收到了错误

  

Msg 8155,Level 16,State 2,Line 5   没有为' A'。

的第1列指定列名

1 个答案:

答案 0 :(得分:4)

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

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;