2016-11-18 12 views
7

MSDN dokumentacja stanowi:COUNT (*) Zawiera zerowe wartości?

COUNT (*) zwraca liczbę elementów w grupie. Obejmuje to wartości i duplikaty NULL .

Jak możesz mieć wartość pustą w grupie? Czy ktoś może wyjaśnić punkt, który próbują zrobić?

+3

Jeśli spojrzeć trochę dalej się one " ve użył lepszego sformułowania: _ "COUNT (*) zwraca liczbę wierszy w określonej tabeli bez pozbycia się duplikatów. Zlicza każdy rząd osobno. Obejmuje to wiersze zawierające wartości null. "_ –

+0

@TimSchmelter Dziękuję, tęskniłem za tym.To powoduje, że rzeczy są znacznie wyraźniejsze –

+0

Usunąłem moje komentarze, ponieważ teraz ponownie przeczytałem twoje pytanie i Twój komentarz, który naprawdę zadajesz" Dlaczego Microsoft napisał takie złe wyjaśnienie w dokumentacji ".Nie znam odpowiedzi na to pytanie: –

Odpowiedz

18

Jeśli masz tę tabelę

Tabela1:

Field1 Field2 Field3 
--------------------------- 
    1   1   1 
    NULL  NULL  NULL 
    2   2  NULL 
    1   1   1 

Następnie

SELECT COUNT(*), COUNT(Field1), COUNT(Field2), COUNT(Field3) 
FROM Table1 

wyjścia:

COUNT(*) = 4; -- count all rows even null/duplicates 

-- count only rows without null values on that field 
COUNT(Field1) = COUNT(Field2) = 3 
COUNT(Field3) = 2 
+0

Mogę utworzyć wiersz, w którym wszystkie pola są zerowe? Czy przypadkiem Microsoft wyjaśnił w swojej dokumentacji –

+1

Tak, możesz mieć wszystkie wartości zerowe z rzędu, tak długo, jak pozwalają na to wszystkie pola, byłoby bardzo * dziwne *, ale możesz.Nie wiesz o zamiarach Microsoftu w dokumentacji.To jest coś, czego musisz się nauczyć po graniu z funkcją. Mają takie same zamieszanie, gdy zaczynają się –

+0

Masz całkowitą rację, właśnie utworzyłem tabelę tymczasową i na pewno COUNT (*) zawierał wiersz zerowy. Po przemyśleniu tego w tym kontekście, Myślę, że bardziej praktyczne wykorzystanie tego i punktu, który prawdopodobnie próbuje zrobić, to grupowanie według wartości zerowej. Na przykład, jeśli pola 2 i 3 w twoim przykładzie nie są puste i zgrupowane według pola 1. –

0

Możesz mieć wartość Null z rzędu, w zależności od sposobu łączenia. Upewnij się, że liczysz właściwe pole lub poprawiasz połączenia.