1

所以我的查询是这样的

SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation FROM Sites WHERE OnHold<>'' or Urgent<>'' or MissingInformation<>'' or SARequired<>'' and PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived') Order By SiteNumber asc

其中 PM 不是 Null - 我也尝试在 vb.net 中将值设置为

PM<>dbnull.value 
'also tried 
PM<> is null 
'or just 
PM<> Null

他们似乎都没有遗漏空值

也让我感到困惑的是,我只要求在上面的查询中看到 PM='K' 的 PM,但我看到的是 'R'

这是我要回来的

pm
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
R
NULL
NULL
NULL

是的,我故意为 PM Column 测试了“K”,因为我知道我没有任何

我敢肯定它是一些愚蠢的简单的东西,只是不能把我的手指放在它上面

任何帮助表示赞赏

4

2 回答 2

3

只需使用IS NOT NULL. 但是您查询中的问题是ORs.

格式化:

SELECT columns
FROM   sites 
WHERE  onhold <> '' 
        OR urgent <> '' 
        OR missinginformation <> '' 
        OR sarequired <> '' 
           AND pm = 'K' 
           AND pm IS NOT NULL 
           AND ( projectstatus <> 'Complete' 
                  OR projectstatus <> 'Archived' ) 
ORDER  BY sitenumber ASC 

如果您想NULLS在任何情况下排除,请将其余条件放在括号中:

SELECT columns 
FROM   sites 
WHERE  pm IS NOT NULL 
       AND ( onhold <> '' 
              OR urgent <> '' 
              OR missinginformation <> '' 
              OR sarequired <> '' 
                 AND pm = 'K' 
                 AND ( projectstatus <> 'Complete' 
                        OR projectstatus <> 'Archived' ) ) 
ORDER  BY sitenumber ASC 

编辑当我告诉它寻找 K 而不是 R 时,我们如何修复 R 出现而不是 K

我一定忽略了这个问题。当您只想拥有行时,pm = 'K'您根本不需要询问非空行,因为pm = 'K'隐式为非空:

WHERE  pm = 'K' 
           AND ( onhold <> ''  ...
于 2013-04-26T15:48:30.810 回答
3

您需要在子句中的初始or条件周围加上括号。where

SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation
FROM Sites
WHERE (OnHold<>'' or Urgent<>'' or MissingInformation<>'' or SARequired<>'') and
      PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived')
Order By SiteNumber asc

在 SQL 中,AND优先级高于OR. 因此,原始语句被解析为:

SELECT pm,SiteNumber,Client,OnHold,Urgent,SARequired,MissingInformation
FROM Sites
WHERE OnHold<>'' or Urgent<>'' or MissingInformation<>'' or 
      (SARequired<>'' and PM='K' and PM is not null and (ProjectStatus<>'Complete' or ProjectStatus<>'Archived'))
Order By SiteNumber asc
于 2013-04-26T15:49:50.503 回答