结果中显示不相关的数据(和,OR条件)?

时间:2016-08-29 07:02:20

标签: sql sql-server-2012

this is my query:
SELECT TOP 10000 [REASON_TEXT]
      ,[PS1]
      ,[PS2]
      ,[PS3]
      ,[PS4]
      ,[PS5]    
  FROM Samsung.[dbo].['NewLP']
where (
      REASON_TEXT = 'Not'
or    REASON_TEXT = 'In'
or    REASON_TEXT = 'Back'
      )
 and PS1 = 'U'
 and PS2 = 'U' or PS2 = ''
 and PS3 = 'U' or PS3 = ''
 and PS4 = 'U' or PS4 = ''
 and PS5 = 'U' or PS5 = ''

所以where子句应该有这三个值,PS1应该有' U'价值和PS2应该有' U'或者它可以是空的,以及PS的其他部分(PS3,PS4,PS5)。

我得到的结果,前两个PS是正确的,但开始第三个'和' ,PS3就像条件不知何故被忽略了?!?

结果如下:

enter image description here

我需要返回那些选定的(围绕它们的红色矩形)。 哪部分代码是错误的。 我已经尝试了各种方式,但没有任何东西返回我需要的结果。 我也为我的病情尝试了这个代码,但没有显示出来。

 and PS1 = 'U'
 and PS2 <> 'P'
 and PS3 <> 'P'
 and PS4 <> 'P'
 and PS5 <> 'P'

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

它是你将“和”和“或”链接在一起的方式,基本上所有在你的陈述中都需要的是PS5 =''(或PS5 ='')。

你需要的是将OR语句分组到括号中,如下所示..

and PS1 = 'U'
and (PS2 = 'U' or PS2 = '')
and (PS3 = 'U' or PS3 = '')
and (PS4 = 'U' or PS4 = '')
and (PS5 = 'U' or PS5 = '')

答案 1 :(得分:1)

previous question获取REASON_TEXT值并查看您的预期结果时会想到:

SELECT TOP 10000 [REASON_TEXT]
      ,[PS1]
      ,[PS2]
      ,[PS3]
      ,[PS4]
      ,[PS5]    
FROM Samsung.[dbo].['NewLP']
WHERE (
      REASON_TEXT = 'Parts Not available (ASC)'
or    REASON_TEXT = 'Parts In Transit (Samsung)'
or    REASON_TEXT = 'Parts Back Ordered (Samsung)'
      )
and   PS1 = 'U' 
and   ( PS2 = 'U' or PS2 IS NULL )
and   ( PS3 = 'U' or PS3 IS NULL )
and   ( PS4 = 'U' or PS4 IS NULL )
and   ( PS5 = 'U' or PS5 IS NULL )

即,您需要检查空值而不是空字符串。