有关医疗审计的一个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