1. 程式人生 > >sql-server 查出同一列的不同值轉變成同一行不同列

sql-server 查出同一列的不同值轉變成同一行不同列

現在有個業務需要,查出一個表的同列不同值的轉換成同一行不同欄位,

如下 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好使