Це трохи хитро. Припустимо, у таблиці є лише один стовпець, тоді Count (1) і Count (*) дадуть різні значення.
set nocount on
declare @table1 table (empid int)
insert @table1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(NULL),(11),(12),(NULL),(13),(14);
select * from @table1
select COUNT(1) as "COUNT(1)" from @table1
select COUNT(empid) "Count(empid)" from @table1
Результати запиту
Як ви бачите на зображенні, Перший результат показує, що таблиця має 16 рядів. з яких два ряди - NULL. Таким чином, коли ми використовуємо Count (*), механізм запиту рахує кількість рядків. Отже, результат підрахунку дорівнює 16. Але у випадку Count (empid) він підраховував не-NULL-значення у стовпці emid . Так ми отримали результат як 14.
тому щоразу, коли ми використовуємо COUNT (стовпець), переконайтеся, що ми беремося за значеннями NULL, як показано нижче.
select COUNT(isnull(empid,1)) from @table1
буде рахувати як NULL, так і Non-NULL значення.
Примітка : те ж саме стосується навіть тоді, коли таблиця складається з декількох стовпців. Підрахунок (1) дасть загальну кількість рядків незалежно від значень NULL / Non-NULL. Тільки коли значення стовпців підраховуються за допомогою підрахунку (стовпця), нам потрібно подбати про значення NULL.