仅过滤列 "if" 满足特定条件
Filtering columns only "if" certain condition is satisfied
我table如下
我想要如下输出
我试过如下操作
SELECT * FROM TABLE_NAME WHERE COLUMN2 = 'PQR' AND COLUMN3 IS NOT NULL
但它也会从第一个 table 中删除 3rd and 4th row
。而在查询的输出中,我只需要删除具有 Column2 as PQR and Column3 as NOT NULL
的行
我也尝试过使用 case
语句,但我无法真正了解如何实现它。
编辑 1:-
我现在还想再尝试一件事。
SELECT * FROM TABLE_NAME WHERE COLUMN2 IN ('PQR', 'XYZ', 'RST') AND COLUMN3 IS NOT NULL
但问题实际上是 table COLUMN2
有超过 150 个不同的值,我不能在 IN
子句中继续提及。
你要的是(如果我没理解错的话)
NOT (COLUMN2 = 'PQR' AND COLUMN3 IS NOT NULL)
相当于
COLUMN2!='PQR' OR COLUMN3 IS NULL
- 不是(第 2 列 = 'PQR' 并且第 3 列不为空)
示例:
SQL> ;
1 with -- test data:
2 t(column1,column2,column3) as (
3 select 'ABC','PQR',cast(null as int) from dual union all
4 select 'DEF','PQR',123 from dual union all
5 select 'GHI','XYZ',cast(null as int) from dual union all
6 select 'JKL','RST',cast(null as int) from dual
7 ) -- test query:
8 select *
9 from t
10* where not(COLUMN2 = 'PQR' AND COLUMN3 IS NOT NULL)
SQL> /
COL COL COLUMN3
--- --- ----------
ABC PQR NULL
GHI XYZ NULL
JKL RST NULL
或 lnnvl(COLUMN2 = 'PQR') 或 COLUMN3 为 NULL
示例:
with -- test data:
t(column1,column2,column3) as (
select 'ABC','PQR',cast(null as int) from dual union all
select 'DEF','PQR',123 from dual union all
select 'GHI','XYZ',cast(null as int) from dual union all
select 'JKL','RST',cast(null as int) from dual
) -- test query:
select *
from t
where lnnvl(COLUMN2 = 'PQR') or COLUMN3 IS NULL;
COL COL COLUMN3
--- --- ----------
ABC PQR NULL
GHI XYZ NULL
JKL RST NULL
我table如下
我想要如下输出
我试过如下操作
SELECT * FROM TABLE_NAME WHERE COLUMN2 = 'PQR' AND COLUMN3 IS NOT NULL
但它也会从第一个 table 中删除 3rd and 4th row
。而在查询的输出中,我只需要删除具有 Column2 as PQR and Column3 as NOT NULL
我也尝试过使用 case
语句,但我无法真正了解如何实现它。
编辑 1:-
我现在还想再尝试一件事。
SELECT * FROM TABLE_NAME WHERE COLUMN2 IN ('PQR', 'XYZ', 'RST') AND COLUMN3 IS NOT NULL
但问题实际上是 table COLUMN2
有超过 150 个不同的值,我不能在 IN
子句中继续提及。
你要的是(如果我没理解错的话)
NOT (COLUMN2 = 'PQR' AND COLUMN3 IS NOT NULL)
相当于
COLUMN2!='PQR' OR COLUMN3 IS NULL
- 不是(第 2 列 = 'PQR' 并且第 3 列不为空)
示例:
SQL> ;
1 with -- test data:
2 t(column1,column2,column3) as (
3 select 'ABC','PQR',cast(null as int) from dual union all
4 select 'DEF','PQR',123 from dual union all
5 select 'GHI','XYZ',cast(null as int) from dual union all
6 select 'JKL','RST',cast(null as int) from dual
7 ) -- test query:
8 select *
9 from t
10* where not(COLUMN2 = 'PQR' AND COLUMN3 IS NOT NULL)
SQL> /
COL COL COLUMN3
--- --- ----------
ABC PQR NULL
GHI XYZ NULL
JKL RST NULL
或 lnnvl(COLUMN2 = 'PQR') 或 COLUMN3 为 NULL
示例:
with -- test data:
t(column1,column2,column3) as (
select 'ABC','PQR',cast(null as int) from dual union all
select 'DEF','PQR',123 from dual union all
select 'GHI','XYZ',cast(null as int) from dual union all
select 'JKL','RST',cast(null as int) from dual
) -- test query:
select *
from t
where lnnvl(COLUMN2 = 'PQR') or COLUMN3 IS NULL;
COL COL COLUMN3
--- --- ----------
ABC PQR NULL
GHI XYZ NULL
JKL RST NULL