任务单编号 样品编号 项目编号 项目分析状态 项目超标状态
1 1111 1 TRUE FALSE
1 1111 2 TRUE FALSE
1 2222 1 TRUE FALSE
1 2222 2 TRUE TRUE
1 2222 3 TRUE FALSE
1 3333 1 TRUE FALSE
1 3333 2 FALSE FALSE
1 4444 2 TRUE FALSE 任务单编号 样品数 其中A类样品数 项目数 任务单分析状态 任务单超标状态
1 4 3 FALSE FALSE样品类别表
id type samplecode …
1 A 1111
2 A 2222
3 B 3333
4 B 4444
任务单编号,
样品数=COUNT(distinct 样品编号),
项目个数=COUNT(distinct 项目编号)
from tb
group by 任务单编号
任务单编号,
样品数=COUNT(distinct 样品编号),
项目个数=COUNT(distinct 项目编号),
其中A类样品数=SUM(case when TYPE='A' then 1 else 0 end)
from tb join 样品类别表 b on tb.样品编号=b.samplecode
group by 任务单编号
任务单编号 样品数 其中A类样品数 项目数
剩下2隔 楼主没表达好
create view ko
as
select
任务单编号,
样品数=COUNT(distinct 样品编号),
项目个数=COUNT(distinct 项目编号),
其中A类样品数=SUM(case when TYPE='A' then 1 else 0 end)
from tb join 样品类别表 b on tb.样品编号=b.samplecode
group by 任务单编号
如果一个任务单只要有一个项目的超标状态为FALSE则整个任务单超标状态为FALSE
--try:
create view ko
as
select
任务单编号,
样品数=COUNT(distinct 样品编号),
项目个数=COUNT(distinct 项目编号),
其中A类样品数=SUM(case when TYPE='A' then 1 else 0 end),
项目分析状态=min(项目分析状态),
项目超标状态=min(项目超标状态)
from tb join 样品类别表 b on tb.样品编号=b.samplecode
group by 任务单编号
任务单编号,
样品数=COUNT(distinct 样品编号),
项目个数=COUNT(distinct 项目编号),
其中A类样品数=SUM(case when TYPE='A' then 1 else 0 end),
任务单分析状态=case when exists (select * from tb where t.任务单编号=任务单编号 and 项目分析状态='FALSE')
then 'FALSE' else true end ,
任务单超标状态=case when exists (select * from tb where t.任务单编号=任务单编号 and 项目超标状态 ='FALSE')
then 'FALSE' else true end from tb t join 样品类别表 b on t.样品编号=b.samplecode
group by 任务单编号
因为FALSE 比 TRUE 小。。
有FALSE 就显示 FALSE
当然,0对应FALSE,1对应TRUE。