我正在使用SQL Server 2008。 我有一个总是返回单行的select语句。我想用另一个返回同一行的select语句包装它,但会过滤掉所有具有空值的列。 例如,如果返回第一个select语句:
C1 C2 C3 C4 C5
----------------------------------
1 2 NULL NULL 5
第二个会过滤掉C3和C4列,我会得到:
C1 C2 C5
-------------------
1 2 5
这可能吗?
谢谢!
答案 0 :(得分:4)
在第二种情况下,只是不要在C3
语句中包含C4
和SELECT
- 这就是你所能做的一切。
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