sql-server 查出同一列的不同值轉變成同一行不同列
阿新 • • 發佈:2019-02-07
現在有個業務需要,查出一個表的同列不同值的轉換成同一行不同欄位,
如下 user_task 表:
id | user_nanm | task_type |
---|---|---|
1 | 張三 | 1 |
2 | 張三 | 2 |
3 | 李四 | 1 |
4 | 李四 | 2 |
5 | 李四 | 3 |
6 | 王五 | 1 |
現在我們要查出,每個人 都有什麼狀態:結果如下
user_name | taskcount | type1 | type2 | type3 |
---|---|---|---|---|
張三 | 2 | 1 | 2 | |
李四 | 3 | 1 | 2 | 3 |
王五 | 1 | 1 |
**查詢列表**sql:
SELECT user_name,COUNT (task_type) AS taskcount,
type1 = (SELECT task_type FROM user_task u1 WHERE u1.user_name = u.user_name AND u1.task_type = 1),
type2 = (SELECT task_type FROM user_task u1 WHERE u1.user_name = u.user_name AND u1.task_type = 2),
type3 = (SELECT task_type FROM user_task u1 WHERE u1.user_name = u.user_name AND u1.task_type = 3)
FROM user_task u GROUP BY user_name
上面這sql語句,mysql不好使
另一種寫法,使用case - when - then -else
select user_name,count(task_type),
max(case task_type when 1 then task_type else 0 end)type1,
max(case task_type when 2 then task_type else 0 end)type2,
max(case task_type when 3 then task_type else 0 end)type3
from user_task group by user_name
這sql語句,mysql好使