一道sql面试题,真难,你会不???????
题目一、
SQL Server中有如下表,用sql统计出某一时间段内门诊与住院的检查人数与费用
表:reg_info{sheetid,patientType,ExamDateTime,fee}
表字段说明:
Sheetid varchar(32)-- 检查号(表明是一次检查),主键
PatientType char(1)-- 病人类别:0代表门诊,1代表住院
ExamDateTime datetime--检查时间
fee decimal(8,2) -- 检查费用
例:
(07年12月——08年6月)数据如下
月份门诊人数门诊费用住院人数住院费用
12110220
1110220
2220220
3110220
4440220
5110220
6110220
会吗?
[解决办法]
select datename(mm,ExamDateTime) as 月份,sum(case when PatientType=0 then 1 else 0 end) as 门诊人数,sum(case when PatientType=0 then fee else 0 end) as 门诊费用,sum(case when PatientType=1 then 1 else 0 end) as 住院人数,sum(case when PatientType=1 then fee else 0 end) as 住院费用from 表where 查询条件=.....group by datename(mm,ExamDateTime)
[解决办法]
select convert(varchar(7),ExamDateTime,120) as 月份, sum(case when PatientType=0 then 0 else 0 end) as 门诊人数, sum(case when PatientType=0 then fee else 0 end) as 门诊费用, sum(case when PatientType=0 then 1 else 0 end) as 住院人数, sum(case when PatientType=0 then fee else 0 end) as 住院费用from reg_infowhere convert(varchar(7),ExamDateTime,120) between '2007-12' and '2008-06'group by convert(varchar(7),ExamDateTime,120)