有关医疗审计的一个SQL查询语句
小弟现在有这么一个问题:一个审计项目,数据库里面两张表,表结构如下(为方便描述,简化):
收费项目表
医疗服务序号 名称 收费标准 医保类型 每日收费次数限制
收费明细表
收费单编码 收费日期 医疗服务序号 病人姓名 就诊卡号 数量 金额
有的医疗项目的每天收费次数是有限制的,现在的需求是要求找出所有的收费次数超过限制的收费项目(一个收费单下的收费项目可以交多次的钱,也就是收费明细表的数量字段),搞了半天,自己弄不明白(group by 和having不会用啊)
------解决方案-------------------- 引用: Quote: 引用:
Quote: 引用:
Quote: 引用:
having 就是过滤 group by分组聚合后的结果的
select 医疗服务序号 ,count(1) from A inner join B on A. 医疗服务序号 =B. 医疗服务序号
group by 医疗服务序号
having count(1)>N SORRY,我没说清楚,是要把收费明细表里一天之内收费次数总和 超过限制的收费记录取出来,
简化了一下
create table 收费项目表
(
Categoryid char(10),
CategoryName varchar(20),
times int
)
insert into 收费项目表 values ('A','项目A',2)
insert into 收费项目表 values ('B','项目A',3)
create table 收费明细表
(
DetailID varchar(50),
Categoryid varchar(10),
CreateDate datetime
)
insert into 收费明细表 values ('1','A',GETDATE())
insert into 收费明细表 values ('2','A',GETDATE())
insert into 收费明细表 values ('3','A',GETDATE())
insert into 收费明细表 values ('4','B',GETDATE())
insert into 收费明细表 values ('5','B',GETDATE())
select * from
(
select distinct A.Categoryid,A.CategoryName,COUNT(1) over(partition by A.Categoryid) as facttimes,A.times
from 收费项目表 A inner join 收费明细表 B on A.Categoryid=B.Categoryid
)t where t.facttimes>t.times
,是要取收费明细表里一天之内收费次数超过限制的记录,不是去超过限制的收费项目
那不是一样吗
select * from
(
select distinct B.*,COUNT(1) over(partition by A.Categoryid) as facttimes,A.times
from 收费项目表 A inner join 收费明细表 B on A.Categoryid=B.Categoryid where create=‘查询日期’
)t where t.facttimes>t.times