Jeg er ikke sikker på, om der er pænere metoder, men dette burde virke:
VÆLG Felt1, Felt2, ISNULL(Felt1) + ISNULL(Felt2) Num_NullFROM DinTabel;
Testtilfælde:
CREATE TABLE YourTable (Felt1 varchar(10), Field2 varchar(10));INSERT INTO YourTable VALUES (NULL, 'A');INSERT INTO YourTable VALUES ('B', 'C');INSERT INTO YourTable VALUES (NULL, 'A'); INTO YourTable VALUES ('B', NULL);INSERT INTO YourTable VALUES (NULL, NULL);
Resultat:
+--------+--------+----------+| Felt1 | Felt2 | Num_Null |+--------+--------+----------+| NULL | A | 1 || B | C | 0 || B | NULL | 1 || NULL | NULL | 2 |+--------+--------+----------+4 rækker i sæt (0,00 sek.)
OPDATERING: Yderligere til det opdaterede spørgsmål:
Hvis du har kolonner i din tabel, der ligner affiliate_1
, affiliate_2
osv., er dette sjældent en god idé, da du ville blande data med metadataene. Generelt er en anbefalet rettelse at bruge en anden afhængig tabel til bruger-til-affilierede relationer, som i følgende eksempel:
CREATE TABLE-brugere ( user_id int, user_name varchar(100), PRIMARY KEY (user_id)) ENGINE=INNODB; CREATE TABLE users_affiliates ( user_id int, affiliate_name varchar(100), PRIMARY KEY (bruger_id, affiliate) FOREIGN KEY (user_id) REFERENCES brugere (user_id)) ENGINE=INNODB;
Sorter derefter brugerne
tabel efter antallet af tilknyttede selskaber vil se nogenlunde sådan ud:
SELECT u.*, d_tb.num_affFROM usersJOIN ( SELECT user_id, COUNT(*) num_aff FROM users_affiliates GROUP BY user_id ) d_tb ON (d_tb.user_id =u.user_id)ORDER BY d_tb.num_aff DESC;
Fordelene er mange, men vigtigst af alt gør det forespørgsler som ovenstående lette at skrive og fleksible nok til at arbejde med et hvilket som helst antal tilknyttede selskaber (og ikke begrænset af antallet af kolonner, du har tildelt).