首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

MS SQL 行转列难点

2013-07-11 
MS SQL 行转列难题--创建表 employee如下CREATE TABLE employee(name varchar(20),sex nvarchar(2),Senior

MS SQL 行转列难题
--创建表 employee如下
CREATE TABLE employee(
name varchar(20),
sex nvarchar(2),
Seniority int,
check (sex in('男','女')))

--如插入6条数据
insert employee values('张俕','男',3);
insert employee values('小儿','男',1)
insert employee values('大意','女',0)
insert employee values('李斯','女',1)
insert employee values('王武','男',2)
insert employee values('孙琦','女',3)

--希望得到以下格式结果
seniority人数(男)  人数(女)
小于1年     
大于等于2年
总数

用sql 语句怎么写?
MS?SQL 行转列 疑难问题 欢迎高手
[解决办法]
select N'小于1年' as seniority,
       sum(case when sex=N'男'then 1 else 0 end)as [人数(男)],
       sum(case when sex=N'男'then 0 else 1 end)as [人数(女)]
from  employee values 
where seniority<1
union all
select N'大于等于2年' as seniority,
       sum(case when sex=N'男'then 1 else 0 end)as [人数(男)],
       sum(case when sex=N'男'then 0 else 1 end)as [人数(女)]
from  employee values 
where seniority>=2
[解决办法]
SELECT 
      '小于1年' as Seniority, 
      MAX(CASE sex WHEN '男' THEN 1 ELSE 0 END) AS '人数(男)',
      MAX(CASE sex WHEN '女' THEN 1 ELSE 0 END) AS '人数(女)'
FROM #Tmp_employee
 where Seniority < 1
union all
SELECT 
      '大于等于2年' as seniority, 
      Sum(CASE sex WHEN '男' THEN 1 ELSE 0 END) AS '人数(男)',
      Sum(CASE sex WHEN '女' THEN 1 ELSE 0 END) AS '人数(女)'


FROM #Tmp_employee
where Seniority >=2

热点排行