表A
id name currect class
1 张三 a 1
2 李四 b 1
3 王五 1
4 张二 1
想求一个sql 当class相同currect字段有值的时候只显示对应currect一行,当currect没有值的时候显示所有没有值的
id name currect class
1 张三 a 1
2 李四 b 1
3 王五 1
4 张二 1
想求一个sql 当class相同currect字段有值的时候只显示对应currect一行,当currect没有值的时候显示所有没有值的
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
是不是说 如果class值相同,不管currect 值是否相同,但必须不为空,则显示一条
不是 是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思比如 currect =a 的时候 就只显示第一条
不是 是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
比如currect=a得时候就只显示第一条!
不是 是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思比如 currect =a 的时候 就只显示第一条
不是 是currect字段等于他的值的时候就显示这条,为空的值都显示出来!currect字段等于他的值的时候就显示这条???,他的值是什么意思
比如currect=a得时候就只显示第一条!
不太明白,如果currect=b呢,4楼的结果不对吗?,你要的结果是怎样的?
我要传值的时候传currect 和 class 当currect=a的时候就值显示a 当currect没有值的时候就按class=1来显示!
则有以下结果: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 行)
and class=@class
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
select * from d where currect='a' and class='1'
else
select * from d
union all
select min(id)id,max(name)name,currect,class from d where currect<>'' group by currect,class
order by id
currect=''可换成其他null判定
我觉得我问的好像有问题重新修改一下
表如下
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的也显示 这样应该明了一点了吧!
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' --根据不同的值得出不同结果
有两个参数@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