任务单编号 样品编号 项目编号 项目分析状态 项目超标状态
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

解决方案 »

  1.   

    select 
    任务单编号,
    样品数=COUNT(distinct 样品编号),
    项目个数=COUNT(distinct 项目编号)
    from tb
    group by 任务单编号
      

  2.   

    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 任务单编号
      

  3.   

    只能写出
    任务单编号    样品数    其中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 任务单编号
      

  4.   

    后面要表达的是:如果一个任务单只要有一个项目的分析状态为FALSE则整个任务单分析状态为FALSE
    如果一个任务单只要有一个项目的超标状态为FALSE则整个任务单超标状态为FALSE
      

  5.   

    CASE WHEN 判断一下就好了
      

  6.   


    --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 任务单编号
      

  7.   

    select 
    任务单编号,
    样品数=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 任务单编号
      

  8.   

    这样也可以。。
    因为FALSE 比 TRUE 小。。
    有FALSE 就显示 FALSE
      

  9.   

    显示的是true,false,实际应该是bit类型,存的是0和1.
    当然,0对应FALSE,1对应TRUE。