我不确定是否有更整洁的方法,但这应该可行:
SELECt Field1, Field2, ISNULL(Field1) + ISNULL(Field2) Num_NullFROM YourTable;
测试用例:
CREATE TABLE YourTable (Field1 varchar(10), Field2 varchar(10));INSERT INTO YourTable VALUES (NULL, 'A');INSERT INTO YourTable VALUES ('B', 'C');INSERT INTO YourTable VALUES ('B', NULL);INSERT INTO YourTable VALUES (NULL, NULL);结果:
+--------+--------+----------+| Field1 | Field2 | Num_Null |+--------+--------+----------+| NULL | A | 1 || B | C | 0 || B | NULL | 1 || NULL | NULL | 2 |+--------+--------+----------+4 rows in set (0.00 sec)
更新: 除了更新的问题:
如果您的表中的列看起来像
affiliate_1,
affiliate_2等,则这不是一个好主意,因为您会将数据与元数据混合。通常,建议的解决方案是将另一个从属表用于用户与关联关系,如以下示例所示:
CREATE TABLE users ( 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 (user_id, affiliate_name), FOREIGN KEY (user_id) REFERENCES users (user_id)) ENGINE=INNODB;
然后按
users会员数量对表格进行排序将如下所示:
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;
优点很多,但是最重要的是,它使上述查询更易于编写,并且足够灵活,可以与任何数量的分支机构一起使用(不受分配的列数的限制)。



