当3列具有空值时,使用查询隐藏表中的行

时间:2015-05-17 13:47:07

标签: sql access-vba ms-access-2010

我正在寻找构建查询的最佳方法,如果三个字段值(在三个不同的列中)为null,则会隐藏记录(行)。下面的代码给我一个3075的语法运行时错误消息。此外,我不确定它是否导致问题,但下面的代码是从主窗体执行并影响子窗体frmStaticDataSkills02。

sql_get = "SELECT [tblCompetency02].[HighLevelObjective], [tblCompetency04].[Self], [tblCompetency04].[SelfSpecialLanguage], [tblCompetency04].[SelfChecklist], [tblCompetency04].[Team], [tblCompetency04].[TeamSpecialLanguage], [tblCompetency04].[TeamChecklist], [tblCompetency04].[Organisation], [tblCompetency04].[OrganisationSpecialLanguage], [tblCompetency04].[OrganisationChecklist], [tblCompetency02].[Competency] FROM [tblCompetency04] INNER JOIN [tblCompetency02] ON [tblCompetency04].[HighLevelObjective] = [tblCompetency02].[ID] WHERE ([tblcompetency04].[self]<>"" or [tblcompetency04].[team]<>"" or [tblcompetency04].[organisation]<>"")"
Form_frmStaticDataSkills02.Form.RecordSource = sql_get

4 个答案:

答案 0 :(得分:2)

在一般意义上,在N列的表中,您可以显式计算表中NULL列的数量,然后将它们相加并将空位数与3中的where谓词进行比较:< / p>

SELECT *
FROM MyTable x
WHERE 
     ((IIF(x.COL1 IS NULL, 1 , 0) + 
       IIF(x.COL2 IS  NULL, 1 , 0) + 
       IIF(x.COL3 IS  NULL, 1 , 0) + 
       IIF(x.COL4 IS  NULL, 1 , 0))) <> 3;

(显然,继续为表的所有N列添加IIF语句

答案 1 :(得分:1)

使用以下命令结束查询:

WHERE [column_1] IS NOT NULL AND [column_2] IS NOT NULL AND [column_3] IS NOT NULL

答案 2 :(得分:1)

您可以在where子句中指定所有3个字段不应为NULL,返回的结果集不会包含所有3个字段都为NULL的记录。

SELECT * 
FROM tablename
WHERE
field1 IS NOT NULL AND
field2 IS NOT NULL AND
field3 IS NOT NULL

如果您不想在任何一个列具有空值的情况下返回行,则可以使用OR。例如:

SELECT * 
FROM tablename
WHERE
field1 IS NOT NULL OR
field2 IS NOT NULL OR
field3 IS NOT NULL

答案 3 :(得分:1)

如果不是所有三列都是NULL,这将返回数据:

app.controller("ShowOrderController", ["orderId", function (orderId, $scope) {
   $scope.orderId = orderId;
}]);

在应用逻辑代数后也是如此:如果三行中的任何一行是NOT NULL,则返回行

where not (col1 is null and col2 is null and col3 is null)