对于某些列,无法在sqlserver中获取无空列

时间:2013-11-13 12:03:43

标签: sql sql-server sql-server-2008 null

我在sqlserver 2008工作

Security Id Accrued Into Default    Accrued Out of Default  Amort Into Default  Amort Out of Default    Security Code           Geneva Investment Code  Has Position    
WERE000015  NULL                        NULL                     NULL           NULL                    mysec1                   02635PTP8             0        
WERE000016  NULL                        NULL                     NULL           NULL                    mysec2                   00104BAF7             0        
WERE000017  11/11/2011                  NULL                     NULL           NULL                    mysec3                   AU0000ABOHG2          0        

我有一张这样的桌子。现在我将这些值放在Temp表中。现在我必须只选择那些在2,3,4,5列

中不存在NULL的值

所以我将MSsql应用为

select * from #temp1 where [Accrued Into Default] IS NOT NULL AND 
 [Accrued Out of Default] IS NOT NULL AND 
 [Amort Into Default] IS NOT NULL AND 
 [Amort Out of Default] IS NOT NULL

现在我得到的输出是 Nothing 在任何行或列中 我想我应该得到第3行,因为它包含 Accrued Into Default

有谁能告诉我为什么会这样。

2 个答案:

答案 0 :(得分:2)

您的查询是针对所有字段为NULL的行进行过滤。

AND更改为OR,您将获得所需的结果。

答案 1 :(得分:0)

如果你想要第三行,那么你的查询应该是这样的:

select * from #temp1 where [Accrued Into Default] IS NOT NULL OR
 [Accrued Out of Default] IS NOT NULL OR
 [Amort Into Default] IS NOT NULL OR
 [Amort Out of Default] IS NOT NULL