Ако droid_v може да бъде само 0, 1, 2, 3 или 4, тогава COUNT(DISTINCT) никога няма да върне повече от 5, тъй като има само пет възможни стойности. Това ли искаш? Ако е така, опитайте това:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v ELSE 0 END) - 1 AS droid /* -1 for the case where droid_v is 0 */
, COUNT(DISTINCT sig_v) AS sig
, SUM(NoExt) AS hits
Актуализация: Ами сега, извинете, горното не е съвсем правилно, тъй като може да не има нула. Трябва да бъде:
SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid
Ако, от друга страна, искате да преброите всички редове, където droid_v> 0, тогава мисля, че искате това:
SELECT puid, SUM(CASE WHEN droid_v > 0 THEN 1 ELSE 0 END) AS droid
, COUNT(DISTINCT sig_v) AS sig
, SUM(NoExt) AS hits
Надявам се това да помогне.