表 A    -----(任务表) task_ID    task_name 
1          任务A 
2          任务B 
3          任务C 
4          任务D 
5          任务E 
6          任务F 
表 B    -----(执行任务表) 
字段 task_ID    task_name    task_status     transactor
1          任务A         完成              张三
1          任务A         完成              张四
1          任务A         完成              张五
2          任务B         未完成            张三
2          任务B         完成              李四
2          任务B         完成              王五
4          任务D         未完成            王五
5          任务E         完成              赵六
说明一下,执行任务表 中任务,要由多人去执行。
只有全部执行完成,这个任务才算完。  如 任务A如果有一个没执行完成,就不算完。    如 任务B
如果 任务表中有,而执行任务表中,没有。 任务也没有完,如:任务F 要求显示所有任务的完成情况:  (所有任务即 A表中有的任务)
task_ID    task_name    reslut 
1          任务A         完成        (A表有数据,B表 任务全部完成) 
2          任务B         未完成      (A表有数据,B表 任务未全部完成) 
3          任务C         未完成      (A表有数据,B表 无数据) 
4          任务D         未完成 
5          任务E         完成 
6          任务F         未完成请问应该如何写? 

解决方案 »

  1.   

    表A的结果,和下面的结果集T做左完全连接。结果集T
    对执行任务表操作.
    根据task_ID来做group by,
    having Min(reslut)(或者MAX(reslut),没有中文的数据库做验证,所以,到底是最大,还是最小,需要查一下编码才知道,LZ可以自己测试一下)
    = '完成'
    这样只是取出所有完成的任务.A和T做左完全连接,NULL的话,就是没有完成的。
      

  2.   

    學會使用union
    SELECT DISTINCT b.task_id, b.task_name FROM b 
    WHERE b.task_id NOT IN
    (SELECT DISTINCT b.task_id FROM b WHERE b.task_status = '0')
    UNION
    SELECT DISTINCT a.task_id, a.task_name FROM a 
    WHERE a.task_id NOT IN (SELECT DISTINCT b.task_id FROM b)
      

  3.   

    select task_id,task_name ,'未完成' reslut from tablea a where not exists 
    (select '1' from tableb b where a.task_id=b.task_id)
    union 
    select task_id,task_name,task_status result from tableb bb where bb.task_status='未完成'
    group by task_id,task_name,task_status
    union 
    select task_id,task_name,'完成' from tablea aa where aa.task_id in 
    (select task_id from tableb 
    minus 
    select task_id from tableb where task_status='未完成');
      

  4.   

    1) insert into 表C(task_id,task_name) select * from 表A;2) SQL> update 表C set reslut='01' where task_id in(        --01表示工作完成
      2  select distinct 表B.TASK_ID,表B.TASK_NAME from 表B
      3  where 表B.Task_Name not in
      4  (select distinct 表B.TASK_name from 表B where 表B.TASK_STATUS='N')
      5  );3)SQL> update 表C set reslut='03' where task_id in(         --03表示工作未完成,B表无数据
      2  
      2   select distinct 表A.TASK_ID from 表A
      3  where 表A.TASK_ID not in(select distinct 表B.TASK_ID from 表B)
      4  );--02表示工作未完成,B表未全部完成   这里就不具体写了
      

  5.   

    楼上的你的那个语句有问题,回报值太多的错误,第一个select语句查询的值多了,只用一个task_id就可以了,修改如下
    update c set result1='完成' where 
    task_id  in (select distinct b.task_id from b where b.task_name not in 
    (select distinct b.task_name from b where task_status = '未完成'))---全部完成的update c set result1='未完成' where 
    task_id  not in (select distinct b.task_id from b where b.task_name not in 
    (select distinct b.task_name from b where rtrim(task_status) = '未完成'))--未全部完成的
    update c set result1='未完成' where 
    task_id  not in (select distinct b.task_id from b )--一个都没有完成的
      

  6.   

    试试看~~===================sql=========================select a.task_ID,
           a.task_name,
           decode(fin_sign,null,'unFinished',fin_sign) as results
      from A,
           (select yy.*,
                   decode(sign(unfinishedTask),0,'Finished','unFinished') as fin_sign
              from (
                    select b.task_ID,
                           b.task_name,
                           sum(case when b.task_status = '完成' 
                                then 1
                                else 0
                            end) as finishedTask,
                            sum(case when b.task_status = '未完成' 
                                then 1
                                else 0
                            end) as unfinishedTask
                      from B
                     group by b.task_ID,b.task_name
                    )yy
             )zz
     where a.task_ID = zz.task_ID(+)
     order by a.task_ID;
    ==================result=======================   TASK_ID TASK_NAME RESULTS
    ---------- --------- ----------
             1 任务A     Finished
             2 任务B     unFinished
             3 任务C     unFinished
             4 任务D     unFinished
             5 任务E     Finished
             6 任务F     unFinished6 rows selected