我在 MySQL 中有一个如下表:
+-----+------+-------+-----------+----------+---------+
| #id | NAME | empid | c_lan | Java_lan | Dot_lan |
+-----+------+-------+-----------+----------+---------+
| 1 | raju | 111 | yes | NULL | NULL |
| 1 | raju | 111 | NULL | NO | NULL |
| 1 | raju | 111 | NULL | NULL | na |
| 2 | ramu | 222 | yes | NULL | NULL |
| 2 | ramu | 222 | NULL | NO | NULL |
| 2 | ramu | 222 | NULL | NULL | na |
+-----+------+-------+-----------+----------+---------+
Run Code Online (Sandbox Code Playgroud)
如何编写查询以获得以下结果?
+-----+------+-------+-------+----------+---------+
| #id | name | empid | c_lan | Java_lan | Dot_lan |
+-----+------+-------+-------+----------+---------+
| 1 | raju | 111 | yes | no | na |
| 2 | ramu | 222 | yes | no | na |
+-----+------+-------+-------+----------+---------+
Run Code Online (Sandbox Code Playgroud)
SELECT id, name, empid
MAX(c_lan) AS c_lan,
MAX(Java_lan) AS Java_lan,
MAX(Dot_lan) AS Dot_lan
FROM tbl
GROUP BY id, name, empid;
Run Code Online (Sandbox Code Playgroud)
如果您确实需要no
而不是NO
,则添加LOWER(...)
。
编辑。
我假设一个表结构类似于
CREATE TABLE Lans (
// id NAME empid c_lan Java_lan Dot_lan
id SMALLINT UNSIGNED NOT NULL,
name VARCHAR(50) NOT NULL,
empid SMALLINT UNSIGNED NOT NULL,
c_lan VARCHAR(10) NULL,
java_lan VARCHAR(10) NULL,
dot_lan VARCHAR(10) NULL,
PRIMARY KEY(id, name)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)