--#t1 文章表 
CREATE TABLE #t1(docID INT,docTitle VARCHAR(100))
  INSERT #t1( docID, docTitle )
   SELECT 1,'文章1' UNION ALL
   SELECT 1,'文章1' UNION ALL
   SELECT 2,'文章2' UNION ALL
   SELECT 3,'文章3' UNION ALL
   SELECT 4,'文章4' 
--#t2 用户对文章评论及管理员是否已确认评论人的评论
  create TABLE #t2(docID int,userID int,opinion varchar(10),hadRead CHAR(1))
  INSERT #t2( docID, userID, opinion,hadRead )
    SELECT 1,10,'同意','Y' UNION ALl
    SELECT 1,20,'不同意','Y' UNION ALl
    SELECT 2,10,'同意','N' UNION ALl 
    SELECT 2,30,'同意','N' UNION ALl 
    SELECT 2,20,'同意','N' UNION ALl 
    SELECT 3,40,'同意','Y' UNION ALl 
    SELECT 3,50,'不同意','N' /*   
现在如何根据两张表形成一个汇总,体现评论人对文章的总体评论和管理员哪些评论已经确认?谢谢
所有人的opinion=同意 则同意,否则为不同意  所有人的hadRead=Y 则为Y,否则为N
 docID | opinion | hadRead
 1     | 不同意  | Y       
 2     | 同意    | N
 3     | 不同意  | N
 4     |         |   
 */

解决方案 »

  1.   


    --#t1 文章表  
    CREATE TABLE #t1(docID INT,docTitle VARCHAR(100))
      INSERT #t1( docID, docTitle )
      SELECT 1,'文章1' UNION ALL
      SELECT 2,'文章2' UNION ALL
      SELECT 3,'文章3' UNION ALL
      SELECT 4,'文章4'  
    --#t2 用户对文章评论及管理员是否已确认评论人的评论
      create TABLE #t2(docID int,userID int,opinion varchar(10),hadRead CHAR(1))
      INSERT #t2( docID, userID, opinion,hadRead )
      SELECT 1,10,'同意','Y' UNION ALl
      SELECT 1,20,'不同意','Y' UNION ALl
      SELECT 2,10,'同意','N' UNION ALl  
      SELECT 2,30,'同意','N' UNION ALl  
      SELECT 2,20,'同意','N' UNION ALl  
      SELECT 3,40,'同意','Y' UNION ALl  
      SELECT 3,50,'不同意','N'
    goselect a.docid,(case when exists (select 1 from #t2 where docid = a.docid and opinion = '不同意')
    then '不同意' else '同意' end)opinion
                  ,(case when exists (select 1 from #t2 where docid = a.docid and hadRead = 'N')
    then 'N' else 'Y' end)hadRead
    from #t1 adrop table #t1,#t2
    docid       opinion hadRead
    ----------- ------- -------
    1           不同意     Y
    2           同意      N
    3           不同意     N
    4           同意      Y(4 行受影响)
      

  2.   


    select #t1.docid,(case when not exists (select 1 from #t2 where docid = #t1.docid and opinion = '不同意')
         then '同意' else '不同意' end) opinion
    ,(case when not exists (select 1 from #t2 where docid = #t1.docid and hadRead = 'N')
        then 'Y' else 'N' end) hadRead
    from #t1
    drop table #t1,#t2
    docid opinion hadRead
    ----- ------- -------
    1     不同意     Y
    2     同意       N
    3     不同意     N
    4     同意       Y(4 行受影响)
      

  3.   

    select distinct t1.docID,
            opinion=(case when (select count(*) from #t2 as t2 where t2.docID=t1.docID and opinion='不同意')>0
           then '不同意' else '同意' end),
           hadRead=(case when (select count(*) from #t2 as t2 where t2.docID=t1.docID and t2.hadRead='N')>0
           then 'N' else 'Y' end)
     from #t1 as t1
      

  4.   

    其实有一个更简单的投机取巧的方法,只适合只有2种判断条件的情况下
    select docid,min(opinion),min(hadread) from #t2
    group by docid