表A        
     id    name   currect    class
      1     张三    a     1
      2     李四    b     1
      3      王五           1
      4      张二           1
想求一个sql  当class相同currect字段有值的时候只显示对应currect一行,当currect没有值的时候显示所有没有值的  

解决方案 »

  1.   

    好的!  就是   就是当class=1的时候 currect=a  就是显示第一条,  如果cuttect=空的话就只显示最后两条! 应该能明白了吧!
      

  2.   

    if exists(select * from sysobjects where name='d')
    drop table d
    go
    create table d
    (
    id  int primary key identity(1,1),  
    name nvarchar(20),
    currect nvarchar(20),
    class int
    )
    go
    insert into d
    select '张三','a',1 union all
    select '李四','b',1 union all
    select '王五','',1 union all
    select '张二','',1 union all
    select '招六','s',2 union all
    select '孙权','d',2
    go
    select * from d where currect=''
    union all
    select min(id)id,max(name)name,max(currect)currect,class from d where currect<>'' group by class
      

  3.   

    当class相同currect字段有值
    是不是说 如果class值相同,不管currect 值是否相同,但必须不为空,则显示一条
      

  4.   

    select id,name,isnull (null,currect) as currect, class from A where class=1 and currect is not null 
      

  5.   

    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!
      

  6.   

    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
      

  7.   

    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思比如 currect =a 的时候 就只显示第一条  
    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
    比如currect=a得时候就只显示第一条!
      

  8.   

    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思比如 currect =a 的时候 就只显示第一条  
    不是  是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
    比如currect=a得时候就只显示第一条!
    不太明白,如果currect=b呢,4楼的结果不对吗?,你要的结果是怎样的?
      

  9.   


    我要传值的时候传currect 和 class  当currect=a的时候就值显示a  当currect没有值的时候就按class=1来显示!
      

  10.   

    可以分解为俩个条件:currect为空,class 不是currect为空的class
    则有以下结果:select *
    from d
    where currect=''or (class not in(select class from d where currect=''))
    借用#4楼数据,有以下结果:
    id          name                 currect              class       
    ----------- -------------------- -------------------- ----------- 
    3           王五                                        1
    4           张二                                        1
    5           招六                   s                    2
    6           孙权                   d                    2(所影响的行数为 4 行)
      

  11.   

    明确一下我要的结果吧    当currect=a and  class=1 只显示这一行    当currect='' and class=1 时显示所有!
      

  12.   

    where currect=case when isnull(@currect,'')='' then currect else @currect end
     and  class=@class
      

  13.   


    if OBJECT_ID('test') is not null
    drop table test
    go
    create table test(id int,name varchar(10),currect varchar(4),class int)
    insert into test
    select    1 ,    '张三' ,   'a' ,    1  union
    select      2 ,    '李四'  ,  'b' ,    1 union
    select       3 ,     '王五' ,   null ,      1 union
    select       4 ,     '张二',    null ,      1
    select * from test t where not exists(
    select 1 from test where class=t.class and currect<t.currect
    ) and class is not null
      

  14.   

    if exists(select * from d where currect='a' and class='1')
    select * from d where currect='a' and class='1' 
    else
    select * from d
      

  15.   

    lz是要这样的吧?select * from d where currect=''
    union all
    select min(id)id,max(name)name,currect,class from d where currect<>'' group by currect,class 
    order by id
    currect=''可换成其他null判定
      

  16.   


    我觉得我问的好像有问题重新修改一下
    表如下
      id     name     current    class
       1      张三         null       1
       2      李四        a           1
       3      张一        a           1
       4       张二        b          1
       5       李五        c           2当current=a  和 class=1 时显示前3条   当current=b 和class=1时  显示第一条和第四条  当cuttent=c和class=2 时  就只显示第五条。   也就是说如果class=1时 current的值为null的都显示  指定了current值时current等于null的也显示   这样应该明了一点了吧!
      

  17.   

    if exists(select * from sysobjects where name='d')
    drop table d
    go
    create table d
    (
    id  int primary key identity(1,1),  
    name nvarchar(20),
    currect nvarchar(20),
    class int
    )
    go
    insert into d
    select '张三',null,1 union all
    select '李四','a',1 union all
    select '张一','a',1 union all
    select '张二','b',1 union all
    select '李五','c',2 
    go
    --创建存储过程
    create proc pro_d
    @currect nvarchar(10),
    @class nvarchar(10)
    as
    begin
    if @currect is not null and @class='1'
    begin
    select * from d where currect is null or (currect=@currect and class=@class )
    end
    if @class <>'1'
    begin
    select * from d where currect is not null and currect=@currect and class=@class
    end
    end
    exec pro_d 'a','1'  --根据不同的值得出不同结果
      

  18.   

    是这样理解吧?
    有两个参数@class和@currect,@currect可能为空值,根据这两个参数查询符合条件的结果。if @currect is not null
    select  * from d where currect is not null and currect=@currect and class=@class
    else
    select * from d where currect is null