日期:2014-05-18  浏览次数:20603 次

求一巨麻烦的SQL语句,谢谢高人指教!!!
我有如下表结构:
挂号序号 ghxh char(18)
挂号日期 ghrq datetime
挂号科室 ghks char(10)
退号标志 thbz char(1) 0=正常,1=退号
我要求得到每个科室在一段时间内的挂号情况如下:
  科室挂号量统计
查询日期 2007-9-1 至 2007-9-30
科室 挂号人次 退号人次 实际人次
儿科 100 10 90
外科 100 1 99
...................................
要求不用存储过程,不用临时表,我该怎么写SQL语句
谢谢高人了!!

------解决方案--------------------
--try
SQL code

select 科室=ghks,挂号人次=count(*),退号人次=sum(case when thbz=1 then 1 else 0 end),
实际人次=sum(case when thbz=0 then 1 else 0 end)
from tbName
group by ghks

------解决方案--------------------
select ghks 科室 , count(*) 挂号人次 ,
sum(case thbz when '1 ' then 1 end) '退号人次 ', 
sum(case thbz when '0 ' then 1 end) '实际人次 ' 
from tb 
where convert(varchar(7),ghrq,120) = '2007-09 ' 
group by ghks 

------解决方案--------------------
--注意:将''中的空格删除.
select ghks 科室 , count(*) 挂号人次 ,
sum(case thbz when '1' then 1 else 0 end) '退号人次',
sum(case thbz when '0' then 1 else 0 end) '实际人次'
from tb
where convert(varchar(7),ghrq,120) = '2007-09'
group by ghks

------解决方案--------------------
SQL code

select 挂号科室,
[挂号人次]=(select count(*) from table1 where convert(varchar(6),挂号日期,112)='200709')
[退号人次]=sum(case 退号标志 when 1 then 1 else 0 end),
[退号人次]=sum(case 退号标志 when 0 then 1 else 0 end)
from 
table1
where
convert(varchar(6),挂号日期,112)='200709'--取年月
group by 挂号科室