SQL查询按列分组并在行中显示结果,而按另一列分组并在行中显示结果

问题描述

我希望以一种特定的格式将数据分组到一个列上,它将结果显示为行,并且将另一列分组,并在与该行分组相对应的行中显示结果。

数据的格式为:

id  type    insertdate             forUser
------------------------------------------
1   Suit    2020-08-24 13:16:42.000 sw
2   Suit    2020-08-24 13:16:49.000 sw
3   Suit    2020-08-24 00:46:31.773 sw
4   jacket  2020-08-24 13:17:15.000 sw
5   jacket  2020-08-24 13:17:35.000 sw
6   jacket  2020-08-24 00:47:43.620 sw
7   jacket  2020-08-24 00:48:42.470 SK
8   Blazer  2020-08-24 13:19:19.000 SK
9   Blazer  2020-08-24 00:49:00.097 SK
10  Blazer  2020-08-24 00:49:07.130 SK
11  Blazer  2020-08-24 13:20:34.000 SK
12  indo    2020-08-24 13:21:15.000 SK
13  indo    2020-08-24 13:21:46.000 SK
14  indo    2020-08-24 13:21:59.000 SK

,我想要这种格式的结果:

forUser suit jacket blazer indo
--------------------------------
SK      0     1     4       3
sw      3     3     0       0

我不知道如何实现它,我们可以在count子句中使用count吗?

select forUser,count(* where type='suit') 
from tblTurnSys
group by forUser

解决方法

您可以使用条件聚合:

select forUser,sum(case when type = 'suit' then 1 else 0 end) as suit,sum(case when type = 'jacket' then 1 else 0 end) as jacket,sum(case when type = 'blazer' then 1 else 0 end) as blazer,sum(case when type = 'indo' then 1 else 0 end) as indo
from t
group by forUser;