select UsersList.User_UID, UsersList.User_Name,'
                   +' IIf(IsEmpty(count(StudysList.Study_key)), 0, count(StudysList.Study_key))  as StudyNum  from UsersList,StudysList '
                   +' where StudysList.User_UID = UsersList.User_UID   '
                   +' and  StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''
                   +' group by UsersList.User_UID,UsersList.User_Name 
    我想实现的功能是:在检索 str1,str2范围内的StudysList.Study_ID时,如果 count(StudysList.Study_key) 为 0,则
UsersList.User_UID,UsersList.User_Name 还是能显示出来,StudyNum 结果显示为0。
    可是上面的语句实现的是:count(StudysList.Study_key)为0时,就不显示出来了。
    请教各位前辈,该怎么实现我期望的实现方式?

解决方案 »

  1.   

    我的环境是 delphi + ado +access
      

  2.   

    用case语句来做select UsersList.User_UID, UsersList.User_Name,'
                       +' StudyNum = case when count(StudysList.Study_key) = 0 then 0 else count(StudysList.Study_key) end '
                       +' from UsersList,StudysList '
                       +' where StudysList.User_UID = UsersList.User_UID   '
                       +' and  StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''
                       +' group by UsersList.User_UID,UsersList.User_Name 
      

  3.   

    +' and  StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''  你这里加了条件判断count=0是没有检索到结果阿,那你要显示什么呢
      

  4.   

    试试
    select UsersList.User_UID, UsersList.User_Name,'
                       +' StudyNum = case when count(StudysList.Study_key) = 0 then 0 else count(StudysList.Study_key) end '
                       +' from UsersList left jion StudysList '
                       +' on StudysList.User_UID = UsersList.User_UID   '
                       +' where StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''
                       +' group by UsersList.User_UID,UsersList.User_Name 
      

  5.   


    我是想把 UsersList 全部显示出来, 并且在StudyNum 中显示 count 检索的条数,如果是0就显示0。
    ps: access 是不是不能用case when else end 语法啊?
      

  6.   

     select UsersList.User_UID, UsersList.User_Name,'
                       +' IIf(IsEmpty(count(StudysList.Study_key)), 0, count(StudysList.Study_key))  as StudyNum  from UsersList left join StudysList '
                       +' on StudysList.User_UID = UsersList.User_UID   '
                       +' and  StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''
                       +' group by UsersList.User_UID,UsersList.User_Name 
      

  7.   

    将UsersList 全部显示出来你需要使用left join左关联
      

  8.   

                ADOQuery1.SQL.Add('select UsersList.User_UID, UsersList.User_Name,'
                       +' count(StudysList.Study_key)  as StudyNum '
                       +' from UsersList left join StudysList '
                       +' on StudysList.User_UID = UsersList.User_UID   '
                       +' where StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''
                       +' group by UsersList.User_UID,UsersList.User_Name ');
    这样运行出来 还是无法全部显示。。
      

  9.   

    把你的where条件去掉看看,是不是被你的where条件给过滤掉了
      

  10.   


    应该是的 , 它在 left join 左联之后,执行 where 条件过滤
    可是where 后面的条件是必需的。
    像这样
     +' on StudysList.User_UID = UsersList.User_UID   '
                       +' and  StudysList.Study_ID> '+str1+' and StudysList.Study_ID< '+str2+''
    改成  on...and... 后   又提示“不支持连接表形式”
      

  11.   

    再up
    left join on  和 where  的冲突关系,期待高人指点迷津