2016-03-03 73 views
0

我的脚本如下计数 - SQL服务器

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 

但我得到一个错误

消息8155,级别16,状态2,5号线 'A'的列1没有指定列名称。

回答

3

当您使用子查询,所有列需要赐名:

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;