2016-03-03 1 views
0

Mon script est comme ci-dessousnombre de nombre d'enregistrements renvoyés par table temporaire - 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 

mais je reçois une erreur

Msg 8155, niveau 16, état 2, ligne 5 Aucun nom de colonne n'a été spécifié pour la colonne 1 de 'A'.

Répondre

3

Lorsque vous utilisez une sous-requête, toutes les colonnes doivent noms donnés:

SELECT COUNT(0) 
FROM (SELECT COUNT(0) as cnt FROM #t GROUP BY Id 
    ) a; 

Cependant, une façon plus simple d'écrire c'est:

SELECT COUNT(DISTINCT id) 
FROM #t; 

En fait, ce n'est pas exactement le même. Votre version comptera NULL mais ce n'est pas le cas. L'équivalent exact est:

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