日期:2014-05-17  浏览次数:20362 次

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 '人数(女)'