让学生和基础信息表里的进行关联

下面的查询中,设置了姓名为学籍号作为主键,如何让学生信息和另外一个表里(学生基础信息表)的信息关联,不在“学生基础信息表”里的学生,不在查询统计里


select 

单位,

班级,

报告日期,

时段, 

sum(case when 体温<37.3 then 1 else 0 end) 正常人数,

sum(case when 体温>=37.3 then 1 else 0 end) 异常人数,

CASE WHEN CHARINDEX(健康状况,'健康')>0 THEN '健康' ELSE '异常'  END  AS 健康状况 ,

count(1) 人数 

from dbo.学生体温报告

where 报告日期 between '${开始时间}' and '${结束时间}' 

${if(len(姓名)==0,""," and 姓名 like '%"+姓名+"%'")}

${if(len(班级)==0,""," and 班级 like '%"+班级+"%'")}

${if(len(单位)==0,""," and 单位 like '%"+单位+"%'")}

group by 单位,班级,时段,报告日期,

CASE WHEN CHARINDEX(健康状况,'健康')>0 THEN '健康' ELSE '异常'  END

order by 报告日期 desc,班级 desc


PLLLIY}Z3BHW6{{S4%([NQT.png

FineReport nxwzqy1 发布于 2020-4-9 11:24 (编辑于 2020-4-11 11:47)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
1
axingLv6专家互助
发布于2020-4-9 11:41

直接join 学生基础信息表就行了

但是你的体温报告表没有主键就比较乱了,只能通过单位、班级和姓名来对应,还不一定准

select 
a.单位,
a.班级,
报告日期,
时段, 
sum(case when 体温<37.3 then 1 else 0 end) 正常人数,
sum(case when 体温>=37.3 then 1 else 0 end) 异常人数,
CASE WHEN CHARINDEX(健康状况,'健康')>0 THEN '健康' ELSE '异常'  END  AS 健康状况 ,
count(1) 人数 
from dbo.学生体温报告 a
join dbo.学生基础信息表 b on a.单位=b.学校 and a.班级=b.年级+cast(b.班级 as varchar)+'班' and a.姓名=b.姓名
where 报告日期 between '${开始时间}' and '${结束时间}' 
${if(len(姓名)==0,""," and a.姓名 like '%"+姓名+"%'")}
${if(len(班级)==0,""," and a.班级 like '%"+班级+"%'")}
${if(len(单位)==0,""," and a.单位 like '%"+单位+"%'")}
group by a.单位,a.班级,时段,报告日期,
CASE WHEN CHARINDEX(健康状况,'健康')>0 THEN '健康' ELSE '异常'  END
order by 报告日期 desc,a.班级 desc


最佳回答
1
yiyemeiyingLv4高级互助
发布于2020-4-9 11:46
select 
a.单位,
a.班级,
a.报告日期,
a.时段, 
sum(case when a.体温<37.3 then 1 else 0 end) 正常人数,
sum(case when a.体温>=37.3 then 1 else 0 end) 异常人数,
CASE WHEN CHARINDEX(a.健康状况,'健康')>0 THEN '健康' ELSE '异常'  END  AS 健康状况 ,
count(1) 人数 
from dbo.学生体温报告 a left join dbo.学生基础信息表 b 
on a.学生 = b.学生
where 1 = 1 
and b.学生 is not null  -- 重点:排除不在“学生基础信息表”里的学生
and  a.报告日期 between '${开始时间}' and '${结束时间}' 
${if(len(姓名)==0,""," and a.姓名 like '%"+姓名+"%'")}
${if(len(班级)==0,""," and a.班级 like '%"+班级+"%'")}
${if(len(单位)==0,""," and a.单位 like '%"+单位+"%'")}
group by a.单位,a.班级,a.时段,a.报告日期,
CASE WHEN CHARINDEX(a.健康状况,'健康')>0 THEN '健康' ELSE '异常'  END
order by a.报告日期 desc,a.班级 desc


  • 3关注人数
  • 311浏览人数
  • 最后回答于:2020-4-11 11:47
    请选择关闭问题的原因
    确定 取消
    返回顶部