sql取不为空的列

quna117 2011-06-27 10:26:55
一条记录有的列为空,我如何select 列1,列2,这些不为空的列,为空的不在select 中
...全文
894 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xupengsspu 2013-09-10
  • 打赏
  • 举报
回复
@yanweijie0317
楼上还是好好学学sql吧,你这句话的意思是不显示列1为空和列2为空的行,跟列显示不显示没有半毛钱关系
quna117 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 flysql 的回复:]
引用 7 楼 quna117 的回复:
表 a
a b c
1 2

我现在要的是,c列为空的时候,select中就不提取c列,就是select a,b


如果是

SQL code
a
a b c
1 2
4 5 6

这样呢?c列要列出来吗
[/Quote]
只有一条数据
FlySQL 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 quna117 的回复:]
表 a
a b c
1 2

我现在要的是,c列为空的时候,select中就不提取c列,就是select a,b
[/Quote]

如果是
a
a b c
1 2
4 5 6

这样呢?c列要列出来吗
liang145 2011-06-27
  • 打赏
  • 举报
回复

create table tbA
(col1 int,col2 int,col3 int,col4 int)

insert tbA
select 1,2,3,null union all
select 1,2,3,null union all
select 1,2,null,null union all
select 1,2,3,null union all
select 1,2,3,null union all
select 1,2,3,null
go

--col1和col2没有空值
declare @sql as nvarchar(4000)
set @sql=''
select @sql=@sql+'+case when not exists(select 1 from tbA where '+[name]+' is null) then '',' +[name]+''' else '''' end'
from sys.columns where [object_id]=object_id('tbA')
set @sql=' declare @sql2 as nvarchar(4000)'+
' set @sql2= '+stuff(@sql,1,1,'')+
' set @sql2=stuff(@sql2,1,1,'''') '+
' exec(''select ''+ @sql2+'' from tbA'')'
exec(@sql)

col1 col2
----------- -----------
1 2
1 2
1 2
1 2
1 2
1 2

(6 row(s) affected)

go
--col1、col2、col3不全为空
declare @sql as nvarchar(4000)
set @sql=''
select @sql=@sql+'+case when exists(select 1 from tbA where '+[name]+' is not null) then '',' +[name]+''' else '''' end'
from sys.columns where [object_id]=object_id('tbA')
set @sql=' declare @sql2 as nvarchar(4000)'+
' set @sql2= '+stuff(@sql,1,1,'')+
' set @sql2=stuff(@sql2,1,1,'''') '+
' exec(''select ''+ @sql2+'' from tbA'')'
exec(@sql)

col1 col2 col3
----------- ----------- -----------
1 2 3
1 2 3
1 2 NULL
1 2 3
1 2 3
1 2 3

(6 row(s) affected)

试着弄了弄。。
quna117 2011-06-27
  • 打赏
  • 举报
回复
表 a
a b c
1 2

我现在要的是,c列为空的时候,select中就不提取c列,就是select a,b
--小F-- 2011-06-27
  • 打赏
  • 举报
回复
where col is not null
FlySQL 2011-06-27
  • 打赏
  • 举报
回复
只要存在一个值为空就不显示,还是所有值为空才不显示?
quna117 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuam 的回复:]
SQL code
select * from T WHERE 列1 NOT is null and 列2 not is null
[/Quote]
不是这个意思,是为空的列根本不出现在select中,而不是select *
quna117 2011-06-27
  • 打赏
  • 举报
回复
为空不显示
xuam 2011-06-27
  • 打赏
  • 举报
回复
select  *  from  T   WHERE  列1 NOT is null and 列2  not is null
cd731107 2011-06-27
  • 打赏
  • 举报
回复
是列中所有记录都为空的不显示,还是只要有任意一条记录为空就不显示
yanweijie0317 2011-06-27
  • 打赏
  • 举报
回复
select * from T WHERE 列1 is not null and 列2 is not null ,如果是一列值为空,用or ;如果是两列值为空,用and
低调的感觉 2011-06-27
  • 打赏
  • 举报
回复
cd731107 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 quna117 的回复:]
引用 9 楼 flysql 的回复:
引用 7 楼 quna117 的回复:
表 a
a b c
1 2

我现在要的是,c列为空的时候,select中就不提取c列,就是select a,b


如果是

SQL code
a
a b c
1 2
4 5 6

这样呢?c列要列出来吗

只有一条数据
[/Quote]
--显示非null列
create table a(a int,b int,c int)
insert a
select 1,2,NULL union all
select 4,5,6


declare @sql nvarchar(4000)
declare @var nvarchar(4000)

select @sql=isnull(@sql+'+','')+'case when not exists(select 1 from a where '+[name]+' is null) then '
+quotename(','+name,'''')+' else '''' end '
from syscolumns where id=object_id('a')

set @sql='select @a='+@sql+' from a '
exec sp_executesql @sql,N'@a varchar(4000) output',@var output
set @sql='select '+stuff(@var,1,1,'')+' from a'
exec(@sql)

drop table a

/*
a b
----------- -----------
1 2
4 5
*/


--或者是
--显示非null列
create table a(a int,b int,c int)
insert a
select 1,2,NULL union all
select 4,5,6


declare @sql nvarchar(4000)
declare @var nvarchar(4000)

select @sql=isnull(@sql+'+','')+'case when exists(select 1 from a where '+[name]+' is not null) then '
+quotename(','+name,'''')+' else '''' end '
from syscolumns where id=object_id('a')

set @sql='select @a='+@sql+' from a '
exec sp_executesql @sql,N'@a varchar(4000) output',@var output
set @sql='select '+stuff(@var,1,1,'')+' from a'
exec(@sql)

drop table a

/*
a b c
----------- ----------- -----------
1 2 NULL
4 5 6

*/
cd731107 2011-06-27
  • 打赏
  • 举报
回复
--显示非零列
--考勤奖全为null则不显示
create table a(a int,b int,c int)
insert a
select 1,2,NULL

declare @sql nvarchar(4000)
declare @var nvarchar(4000)

select @sql=isnull(@sql+'+','')+'case when exists(select 1 from a where '+[name]+' is not null) then '
+quotename(','+name,'''')+' else '''' end '
from syscolumns where id=object_id('a')

set @sql='select @a='+@sql+' from a '
exec sp_executesql @sql,N'@a varchar(4000) output',@var output
set @sql='select '+stuff(@var,1,1,'')+' from a'
exec(@sql)

drop table a

/*
a b
----------- -----------
1 2
*/

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧