SQL Server-如果两个特定字段都为空,则从视图中排除记录

SQL Server-如果两个特定字段都为空,则从视图中排除记录,sql,sql-server,view,Sql,Sql Server,View,我正在SQL Server中编写一个视图,需要对结果进行筛选,以便如果记录上的两个特定字段具有空值,则排除该记录 例如,表Customer包含字段Code、Name、Address、Payment、Payment\u Date 如果Payment和Payment_Date都为null,则从结果集中排除该记录,但是如果只有一个为null或任何其他字段,则可以返回该记录 在SQL Server中是否可以使用此功能??如果有任何帮助,我们将不胜感激。您可以在where子句中执行此操作,只需将其转过来并

我正在SQL Server中编写一个视图,需要对结果进行筛选,以便如果记录上的两个特定字段具有空值,则排除该记录

例如,表Customer包含字段Code、Name、Address、Payment、Payment\u Date

如果Payment和Payment_Date都为null,则从结果集中排除该记录,但是如果只有一个为null或任何其他字段,则可以返回该记录


在SQL Server中是否可以使用此功能??如果有任何帮助,我们将不胜感激。

您可以在where子句中执行此操作,只需将其转过来并使用OR即可:

SELECT  *
FROM    mytable
WHERE   other_conditions
        …
        AND (payment IS NOT NULL OR payment_date IS NOT NULL)
WHERE
(
  PAYMENT IS NOT NULL
  OR
  PAYMENT_DATE IS NOT NULL
)
AND
  -- ...rest of where clause here...

取两个字段的并集,并检查该值是否为null

select * from yourtable where coalesce(field1, field2, field3, etc, etc,) is not null

这比一串或子句imho

@Lasse-No更容易理解。表达式也需要兼容数据类型。如果付款为十进制且付款日期为,则不会出现这种情况。但是如果float和datetime的话将会是@拉塞:没有,但是索引不太可能被用来过滤这些数据。@Martin——兼容数据类型的一个很好的观点——直到我再次查看,才在OP中看到这一要求。至于coalesce是否可搜索,如果编译器没有将coalesce扩展到case或类似的东西,我会感到惊讶,但即使它扩展到case或类似的东西,我怀疑@quassnoi是正确的,索引可能不会被选择。@Ralph-它确实扩展到case,但case不是可搜索的。