SQL仅根据另一个字段的值过滤字段的某些值

时间:2015-10-12 14:58:06

标签: sql oracle filter

SQL问题!我想在表格中选择多个字段,并根据另一个字段的值对一个字段的某个值执行过滤。 更清楚:

SELECT ORDER_NUMBER, PRICE FROM ORDER_TABLE1
WHERE PRICE IN (35, 40) AND ORDER_NUMBER IS NOT NULL

如果我这样做,那么我的查询将在ORDER_TABLE1上删除我的所有行WHERE PRICES = 15(例如)。

我想根据另一个字段的值过滤掉特定字段中某些值的行。所以在这里,我确实希望保持所有值WHERE PRICES = 15(无论ordnumber是否为null)。关于如何实现这一目标的任何指导? 谢谢你的帮助。

EDIT1:

我知道它会以这种方式工作,但我有大约10个字段来过滤我想要的方式,以下方式似乎不是超级高效(但后来,我是初学者):

SELECT ORDER_NUMBER, PRICE FROM ORDER_TABLE1
WHERE (PRICE = 35 AND ORDER_NUMBER IS NOT NULL)
OR (PRICE = 40 AND ORDER_NUMBER IS NOT NULL)
--ETC...

数据样本

**Table 1**  
ordernumber -- price-- 
-----1------------35--
----NULL----------40--
-----3------------NULL--
-----4------------50--
----NULL----------25--
----11------------60--


**Expected output**

ordernumber -- price-- 
-----1-----------35-- 
-----3----------NULL--
-----4-----------50--  
----NULL----------25--
-----11----------60-- 

NB:虚拟数据

2 个答案:

答案 0 :(得分:0)

好的,在您编辑后,这似乎已接近,但也会返回NULL 25

WHERE NOT (ordernumber IS NULL AND price IN (35, 40))

答案 1 :(得分:0)

为了确保我能够正确理解,您想要查询除​​了行之外的所有内容(35,40等)PRICE并且没有ORDER_NUMBER

在这种情况下,您只需执行以下操作:

SELECT ORDER_NUMBER, PRICE FROM ORDER_TABLE1
WHERE PRICE NOT IN (35, 40) OR ORDER_NUMBER IS NOT NULL

基本上,它会返回不在(35,40,...)中的所有内容,以及包含ORDER_NUMBER的所有行(所以那些具有35/40 /等等的行不是' t null)