用if exists或者用case when分条件查询

解决方案 »

  1.   

    CardStatusID 你表里有吗?。
      

  2.   

    case when CardStatusID=20 then 
      

  3.   

    select  case when CardStatusID=20  then CardStatusID  else   max(CardID) end  from 表名  
    如果没写错的话,就是这样了。。
      

  4.   


    max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的
      

  5.   


    你case when 里面错了
     case when CardStatusID=20  then CardStatusID  else   max(CardID)
      

  6.   


    max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID  else (select top 1  CardID from 表名   order by CardID desc ) end  )as result from 表名 
    这样呢?
      

  7.   

    多大个事啊,这么简单
    select  case when CardStatusID = 20 ten CardStatusID  else CardID   end  as 你要的字段 from
    (select id, sum(case when CardStatusID=20  then CardStatusID else 0 end) as CardStatusID  , max(CardID) as CardID  from 你的表 group by id)   temptb
      

  8.   


    max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID  else (select top 1  CardID from 表名   order by CardID desc ) end  )as result from 表名 
    这样呢?有问题的
      

  9.   


    max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID  else (select top 1  CardID from 表名   order by CardID desc ) end  )as result from 表名 
    这样呢?完全不对了
      

  10.   

    改为select  case when CardStatusID = 20 ten CardStatusID  else CardID   end  as 你要的字段 from
    (select id, sum(case when CardStatusID=20  then CardStatusID else CardStatusID  end) as CardStatusID  , max(CardID) as CardID  from 你的表 group by id)   temptb这样????
      

  11.   

    创建一个临时表,分二或三次处理或是过滤数据插入临时表中。
    然select * from 这个临时表,就是你想要的数据了。
      

  12.   

    简单分析一下你这业务CardID最大的行肯定存在,CardStatusID=20的行不一定存在笨办法就是先判断CardStatusID=20的行的count是否>=1,大于就直接select,小于就选取CardID=max(CardID)不知道有没有方便的方式,仅供参考
      

  13.   

    附个代码IF((select * from YourTable where CardStatusID=20)>=1)
    BEGIN
    select * from YourTable where CardStatusID=20
    END 
    ELSE 
    BEGIN
    selec * from YouerTable where CardID=(select MAX(CardID) from YourTable)
    END
      

  14.   

    if exists (select * from 表名 where CardStatusID= '20')
    begin
     select * from 表名 CardStatusID= '20'
    end
    else
    begin 
     select * from 表名where CardStatusID= (select max(CardStatusID) from 表名)
    end取得哪些字段自己添加
      

  15.   

    select * from 表名where CardStatusID= (select max(CardID) from 表名)
      

  16.   


    max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID  else (select top 1  CardID from 表名   order by CardID desc ) end  )as result from 表名 
    这样呢?完全不对了

    g感谢兄弟的回答,但是还是不对。
      

  17.   

    [这个不对啊, selec * from YouerTable where CardID=(select MAX(CardID) from YourTable) 这个在怎么可以是这样呢, 等于最大值
      

  18.   


    不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。
      

  19.   


    不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。
    不是你自己说,如果有CardStatusID=20的返回CardStatusID=20的数据,没有就返回CardID最大的数据吗
      

  20.   


    不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...
      

  21.   


    不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1)
    BEGIN
    select * from YourTable where CardStatusID=20
    END 
    ELSE 
    BEGIN
    select * from YouerTable where CardID=(select MAX(CardID) from YourTable)
    END用这个妥妥的可以
      

  22.   


    不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1)
    BEGIN
    select * from YourTable where CardStatusID=20
    END 
    ELSE 
    BEGIN
    select * from YouerTable where CardID=(select MAX(CardID) from YourTable)
    END用这个妥妥的可以
      

  23.   


    不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1)
    BEGIN
    select * from YourTable where CardStatusID=20
    END 
    ELSE 
    BEGIN
    select * from YouerTable where CardID=(select MAX(CardID) from YourTable)
    END用这个妥妥的可以
    你返回的全是20状态的,其他压根没有返回
      

  24.   

    ......你不是就要求这样?“我要的结果是查询CardStatusID=20的,没有则选取CardID为最大那条。”???
      

  25.   

    ......你不是就要求这样?“我要的结果是查询CardStatusID=20的,没有则选取CardID为最大那条。”???
    我要的结果是,如果没有20的,就返回其他状态,且CardID最大那条
    如:结果是:
      

  26.   

    ......你不是就要求这样?“我要的结果是查询CardStatusID=20的,没有则选取CardID为最大那条。”???
    我要的结果是,如果没有20的,就返回其他状态,且CardID最大那条
    如:结果是:
    测试卡1取的是最大cardid那条记录
      

  27.   

    begin
    if ((select count(1) from a where CardStatusID=20)>0)
    begin
    select * from a where a.empid in(select empid from a where CardStatusID=20)
    end
    else
    begin
    select * from a where a.empid in(select empid from a where CardID=(select max(CardID) from a))
    end
    end
      

  28.   


    select * from 表 where cardstatusid=20 union
    select a.* from 表 as a,(select empid,max(cardid) as c from 表 where cardstatusid<>20 group by empid)) as b where a.empid=b.empid and a.cardid=b.c
      

  29.   


    declare @count int 
    set @count = ( select COUNT(*) from  表名  where [CardStatusID] <> 20)
    declare @i int
    declare @sql varchar(max)
    set @i=0
    set @sql= 'select * from  表名   where [CardStatusID] = 20 '
    while @i<@count
    begin 
      set @sql += ' union ALL '
      set @sql += 'select * from 表名 where CardID = (select max(CardID) from 表名)'
    set @i=@i+1
    end
    exec (@sql)
    看下这个可以不
      

  30.   

    大半天了楼主不会还在纠结这个问题?早上那会没读仔细你的需求,一个sql语句太复杂写不出大不了多查几次,在程序里面处理下也是阔以的。
    下面这个是你需要的
     select     *  from 
    (select  a. * , b.maxCardID   from 你的表  a  left join (select 你的表.主键,,max(CardID) as maxCardID from   你的表 group by 你的表.主键)   b
     on a. 你的表.主键= b.你的表.主键) temp  where  CardStatusID=20  or (CardStatusID !=20 and maxCardID   is not null) 
      

  31.   

    某一层楼提议,用个变量count记录CardStatusID=20的数据记录,不等于0的话就查询出CardStatusID=20,等于0再select max(CardID)。这才是你的需求嘛
      

  32.   

     
    怎么会有两条记录呢?

    还有就是你的需求是说,如果这一行不是等于20就用CardID最大的那行,这样就会出现多行一样的ID了,我在想:你的需求到底是那样?
      

  33.   

    select * from 表 where cardstatusid=20 
    union
    select a.* from 表 as a,(select empid,max(cardid) as c from 表 where cardstatusid<>20 and empid not in (select empid from 表 where cardstatusid=20) group by empid) as b where a.empid=b.empid and a.cardid=b.c
      

  34.   

    感觉你就是在找CardStatusID=20的数据集合加上max(cardID)的一条记录,不知道理解的对否,只要记录不为空那么一定存在最大值,用union做个查询试试