这几天一直有个问题困扰了我好一阵子,终于在朋友的帮助下解决了;问题是这样的一张表里有多个用户编号,并且用户编号不是唯一的,也有多个项目类型(已办项目,在办项目,待办项目),一个用户可以对应多个工具箱类型,多个用户也对应多个项目类型(已办项目,在办项目,待办项目),列表如下:
编号 项目类型 任务编号 用户编号
10010 已办项目 RW001 GH01
10011 在办项目 RW002 GH02
10020 已办项目 RW005 GH05
10013 已办项目 RW004 GH04
10014 在办项目 RW005 GH03
10015 待办项目 RW006 GH01
10016 在办项目 RW007 GH01
10017 在办项目 RW008 GH01
10019 待办项目 RW003 GH05
本人希望得到的结果是一个用户所对应的项目类型个数找出来,比如说GH01用户的已办项目,在办项目,待办项目分别有多少个GH02用户所对应的用户分别是多少个,将其一一对应:
用户名 待办项目 在办项目 已办项目
鲍泳寰 0 0 1
李丹妮 0 1 0
徐建 1 0 1
袁浩正 1 2 1
赵霞 0 1 0
解决思路:将列转化为行
代码:
select 用户名,
count(case when 项目类型='待办项目' then 'value' end) as 待办项目, 其中value无实际意义
count(case when 项目类型='在办项目' then 'value' end) as 在办项目,
count(case when 项目类型='已办项目' then 'value' end) as 已办项目
from 工作箱,用户信息表 where 工作箱.用户编号=用户信息表.用户编号
group by 用户名
编号 项目类型 任务编号 用户编号
10010 已办项目 RW001 GH01
10011 在办项目 RW002 GH02
10020 已办项目 RW005 GH05
10013 已办项目 RW004 GH04
10014 在办项目 RW005 GH03
10015 待办项目 RW006 GH01
10016 在办项目 RW007 GH01
10017 在办项目 RW008 GH01
10019 待办项目 RW003 GH05
本人希望得到的结果是一个用户所对应的项目类型个数找出来,比如说GH01用户的已办项目,在办项目,待办项目分别有多少个GH02用户所对应的用户分别是多少个,将其一一对应:
用户名 待办项目 在办项目 已办项目
鲍泳寰 0 0 1
李丹妮 0 1 0
徐建 1 0 1
袁浩正 1 2 1
赵霞 0 1 0
解决思路:将列转化为行
代码:
select 用户名,
count(case when 项目类型='待办项目' then 'value' end) as 待办项目, 其中value无实际意义
count(case when 项目类型='在办项目' then 'value' end) as 在办项目,
count(case when 项目类型='已办项目' then 'value' end) as 已办项目
from 工作箱,用户信息表 where 工作箱.用户编号=用户信息表.用户编号
group by 用户名