--测试环境
declare @t table(姓名 varchar(10),性别 varchar(4),年龄 int,收入 int,在职情况 varchar(10),工种 varchar(5))
insert @t select '张三', '男', 20, 500, '在职', '焊工'
union all select '李四', '女', 25, 400, '在职', '焊工'
union all select '王二', '男', 35, 1200, '在职', '焊工'
union all select '麻子', '男', 50, 300, '离职', '钳工'
--查询语句
select 工种,
男=sum(case 性别 when '男' then 1 else 0 end),
女=sum(case 性别 when '女' then 1 else 0 end),
'年龄<=35'=sum(case when 年龄<=35 then 1 else 0 end),
'年龄>35'=sum(case when 年龄>35 then 1 else 0 end),
'收入>1000'=sum(case when 收入>1000 then 1 else 0 end),
'收入<1000'=sum(case when 收入<1000 then 1 else 0 end),
在职=sum(case 在职情况 when '在职' then 1 else 0 end),
离职=sum(case 在职情况 when '离职' then 1 else 0 end)
from @t
group by 工种
--结果
select 工种, 男 = sum(case 性别 when '男' then 1 else 0 end),
女 = sum(case 性别 when '女' then 1 else 0 end),
年龄1 = (select count(*) from 表 where 年龄 <= 35),
年龄2 = (select count(*) from 表 where 年龄 > 35),
收入1 = (select count(*) from 表 where 收入 >= 1000),
收入2 = (select count(*) from 表 where 收入 < 1000),
在职 = (select count(*) from 表 where 在职状况 = '在职'),
离职 = (select count(*) from 表 where 在职状况 = '离职')
from 表 group by 工种
--建立测试环境
Create Table TEST
(姓名 Nvarchar(10),
性别 Nvarchar(2),
年龄 Int,
收入 Int,
在职状况 Nvarchar(10),
工种 Nvarchar(10))
--插入数据
Insert TEST Values(N'张三', N'男', 20, 500, N'在职', N'焊工')
Insert TEST Values(N'李四', N'女', 25, 400, N'在职', N'焊工')
Insert TEST Values(N'王二', N'男', 35, 1200, N'在职', N'焊工')
Insert TEST Values(N'麻子', N'男', 50, 300, N'离职', N'钳工')
--测试
Select
工种,
SUM(Case 性别 When N'男' Then 1 Else 0 End) As 男,
SUM(Case 性别 When N'女' Then 1 Else 0 End) As 女,
SUM(Case When 年龄<=35 Then 1 Else 0 End) As N'年龄<=35',
SUM(Case When 年龄>35 Then 1 Else 0 End) As N'年龄>35',
SUM(Case When 收入>1000 Then 1 Else 0 End) As N'收入>1000',
SUM(Case When 收入<1000 Then 1 Else 0 End) As N'收入<1000',
SUM(Case 在职状况 When N'在职' Then 1 Else 0 End) As 在职,
SUM(Case 在职状况 When N'离职' Then 1 Else 0 End) As 离职
from TEST
Group By 工种
--删除测试环境
Drop Table TEST
--结果
/*
工种 男 女 年龄<=35 年龄>35 收入>1000 收入<1000 在职 离职
焊工 2 1 3 0 1 2 3 0
钳工 1 0 0 1 0 1 0 1
*/
Select
工种,
SUM(Case 性别 When N'男' Then 1 Else 0 End) As 男,
SUM(Case 性别 When N'女' Then 1 Else 0 End) As 女,
SUM(Case When 年龄<=35 Then 1 Else 0 End) As N'年龄<=35',
SUM(Case When 年龄>35 Then 1 Else 0 End) As N'年龄>35',
SUM(Case When 收入>1000 Then 1 Else 0 End) As N'收入>1000',
SUM(Case When 收入<1000 Then 1 Else 0 End) As N'收入<1000',
SUM(Case 在职状况 When N'在职' Then 1 Else 0 End) As 在职,
SUM(Case 在职状况 When N'离职' Then 1 Else 0 End) As 离职
from TEST
Group By 工种
select 工种,男=sum(case when 性别='男' then 1 else 0 end ),女=sum(case when 性别='女' then 1 else 0 end ),[年龄<=35]=sum(case when 年龄<=35 then 1 else 0 end),[年龄>35]=sum(case when 年龄<=35 then 1 else 0 end),[收入>1000]=sum(case when 收入>1000 then 1 else 0 end),[收入<1000]=sum(case when 收入<1000 then 1 else 0 end),在职=sum(case when 在职状况='在职' then 1 else 0 end),离职=sum(case when 在职状况='离职'then 1 else 0 end) from table group by 工种