UserAnswer中ID   userID    Type    UserMark 
————————————————————————————————
1      101     A         null
2      101     A          2
3      102     A          3
4      102     A          2
————————————————————————————————
想要得到的结果:如果useID的UserMark中只要有一个为null,则State为未评阅' ,怎么写啊?我的sql:
SELECT DISTINCT
    userID,
    Type,      
    'State' = CASE WHEN  UserMark is  NULL THEN '未评阅' ELSE '已评阅' END    
FROM 
    UserAnswer
WHERE
    Type='A'
-----------------------
此时得到3条数据,
101 A  未评阅
101 A  已评阅      //这条数据不我不想要,该怎么处理?
102 A  已评阅

解决方案 »

  1.   

    SELECT DISTINCT 
        userID, 
        [Type],      
        State = CASE WHEN  exists(select 1 from UserAnswer b where b.userID = a.userID and UserMark  is null) THEN '未评阅' ELSE '已评阅' END    
    FROM UserAnswer a
    WHERE Type='A' 
      

  2.   

    SELECT DISTINCT
        userID,
        Type,     
        'State' = CASE when (select COUNT(*) from UserAnswer where userID=a.userID and UserMark IS null )>0 THEN '未评阅' ELSE '已评阅' END   
    FROM
        UserAnswer a
    WHERE
        Type='A' 
      

  3.   


    select distinct userID , Type , State = case when useID is null or UserMark is null then '未评阅' else '已评阅' end from UserAnswer
      

  4.   

    select userID , Type , State = case when useID is null or UserMark is null then '未评阅' else '已评阅' end from UserAnswer WHERE Type='A' and userID not in (select userID from useranswer where Type='A' and (useID is null or UserMark is null))
      

  5.   

    declare @UserAnswer table(ID int,userID varchar(16),Type varchar(16),UserMark varchar(16))insert into @UserAnswer
    select '1','101','A',null union all
    select '2','101','A',2 union all
    select '3','102','A',3 union all
    select '4','102','A',2 --code
    SELECT  
        userID, 
        Type,      
        'State' = min(CASE WHEN  UserMark is  NULL THEN '未评阅' ELSE '已评阅' END)
    FROM 
        @UserAnswer 
    WHERE 
        Type='A' 
    group by userID,Type
      

  6.   

    create table tb(ID int , userID int , Type varchar(10) , UserMark int)
    insert into tb values(1 , 101 , 'A' , null) 
    insert into tb values(2 , 101 , 'A' , 2 )
    insert into tb values(3 , 102 , 'A' , 3 )
    insert into tb values(4 , 102 , 'A' , 2 )
    goselect distinct userID , Type , State = '未评阅' from tb WHERE Type='A' and (userID is null or UserMark is null)
    union all
    select distinct userID , Type , State = '已评阅' from tb WHERE Type='A' and (userID is not null and UserMark is not null) and userid not in (select distinct userID from tb WHERE Type='A' and (userID is null or UserMark is null))
    order by useriddrop table tb/*
    userID      Type       State  
    ----------- ---------- ------ 
    101         A          未评阅
    102         A          已评阅(所影响的行数为 2 行)*/
      

  7.   

    SELECT DISTINCT 
        userID, 
        Type,      
        'State' = CASE WHEN  (UserMark is  NULL or uerid is null) THEN '未评阅' ELSE '已评阅' END    
    FROM 
        UserAnswer 
    WHERE 
        Type='A'