筛选出SQL中包含NULL值的列

时间:2011-12-01 15:25:48

标签: sql-server-2008

我正在使用SQL Server 2008。 我有一个总是返回单行的select语句。我想用另一个返回同一行的select语句包装它,但会过滤掉所有具有空值的列。 例如,如果返回第一个select语句:

C1     C2     C3     C4     C5
----------------------------------
1       2    NULL   NULL     5

第二个会过滤掉C3和C4列,我会得到:

C1      C2      C5
-------------------
1       2        5

这可能吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

在第二种情况下,只是不要在C3语句中包含C4SELECT - 这就是你所能做的一切。

T-SQL中没有 magic 选项可以省略NULL - 您想要列,然后在{ {1}}列列表,或者您不想要它 - 然后将其删除。

答案 1 :(得分:2)

这真的是前端的工作而不是T-SQL

也就是说,它可以用动态SQL来完成,但是从前端调用这个select语句来做起来要容易得多

答案 2 :(得分:0)

那你为什么不创建一个非空值的视图,比如

create view vnotnull as select C1,C2,C5 from your_table

答案 3 :(得分:0)

我不确定这是否有帮助,但几乎听起来UNPIVOT可能值得一看。它将列值作为不同的行返回。

declare @t table(c1 int, c2 int, c3 int, c4 int, c5 int)

insert into @t(c1,c2,c3,c4,c5) values (1,2,null, null, 5)

select cols, col
from (select c1,c2,c3,c4,c5 from @t) p
unpivot (cols for col in (c1,c2,c3,c4,c5)) as unpvt

返回:

cols        col
----------- ---------
1           c1
2           c2
5           c5