SQL筛选空列

时间:2013-04-22 21:39:19

标签: sql sql-server

我有一个像

这样的查询
select *
from tableName
where x='3'

这给了我一些结果,但我不希望看到每行都是空的任何列。有没有一种简单的方法来过滤掉那些?

2 个答案:

答案 0 :(得分:4)

没有。

你所追求的是一些语法,如

select <column list::filter(where all rows are NULL)>

但是,它没有意义。不是一般意义上的。在SSMS或一次性查询工具中使用它可能看起来很酷,但是对于像Joe.Net这样想要不可预测数量的列的程序中的Joe Public的日常使用?

现在,如果您真的想要这样做,可以使用动态SQL来实现,但是必须使用这种方式对ONCE-PER-TABLE进行编码。

答案 1 :(得分:1)

你可以用动态SQL尝试一些疯狂的东西,但我真的不推荐这个。

此查询检查前两列是否具有所有空值,然后将它们添加到select语句。如果你真的想要这样做,你可以对表中的所有列进行相同的操作。

DECLARE @sql nvarchar(1000)
DECLARE @columnList nvarchar(1000)
SET @columnList = ''

DECLARE @tableRowCount int
DECLARE @columnRowCount int

SET @tableRowCount = (select COUNT(*) from tableName)

SET @columnRowCount = (select COUNT(*) from tableName where column1 is null)
IF @tableRowCount <> @columnRowCount 
    SET @columnList = @columnList + 'column1, '

SET @columnRowCount = (select COUNT(*) from tableName where column2 is null)
IF @tableRowCount <> @columnRowCount 
    SET @columnList = @columnList + 'column2, '


IF LEN(@columnList) > 0
    SET @sql = 'SELECT ' + SUBSTRING(@columnList,1, LEN(@columnList) - 1) + ' FROM tableName'
ELSE
    SET @sql = 'SELECT * FROM tableName'

EXEC(@sql)