Условие создания Oracle необязательно в операторе Select - PullRequest
0 голосов
/ 05 октября 2019

Как сделать условие необязательным? То есть, если условие условия where является ЛОЖНЫМ, как проще всего игнорировать условие?

Ожидаемый результат моего кода:

RR
--
100
200

Мой кодесть,

WITH DATASET AS ( 
  SELECT 1 A, 10 B, 100 RR FROM DUAL
  UNION
  SELECT NULL A, 10 B, 200 RR FROM DUAL
)
SELECT RR
FROM DATASET
WHERE 
A=2  -- How to make this condition optional(that is, as 2 is not found then,ignoring this condition)
AND 
B=10 
;

1 Ответ

0 голосов
/ 07 октября 2019

Я понял, что если не существует 2 во всех данных, которые вы не хотите фильтровать, но если в столбце 2 есть 2, то вы хотите его.

, поэтому попробуйте это:

РЕШЕНИЕ 1:

SELECT * FROM 
(
WITH DATASET AS ( 
  SELECT 1 A, 10 B, 100 RR FROM DUAL
  UNION
  SELECT NULL A, 10 B, 200 RR FROM DUAL
)
SELECT  
RR
FROM
DATASET
WHERE B=10 
AND EXISTS
(
SELECT 1 FROM DATASET WHERE A=2
)
)
UNION 
SELECT * FROM 
(
WITH DATASET AS ( 
  SELECT 1 A, 10 B, 100 RR FROM DUAL
  UNION
  SELECT NULL A, 10 B, 200 RR FROM DUAL
)
SELECT  
RR
FROM
DATASET
WHERE B=10 
AND NOT EXISTS
(
SELECT 1 FROM DATASET WHERE A=2
)
)

РЕШЕНИЕ2:

WITH DATASET AS ( 
  SELECT 1 A, 10 B, 100 RR FROM DUAL
  UNION
  SELECT NULL A, 10 B, 200 RR FROM DUAL
)
,SUB AS (
SELECT DISTINCT 1 A_EXISTS,RR
FROM DATASET
WHERE A=2
),
SUB2 AS (
SELECT DISTINCT
CASE 
  WHEN SUB.A_EXISTS IS NOT NULL AND DATASET.A=2
    THEN SUB.RR
  WHEN SUB.A_EXISTS IS NOT NULL AND DATASET.A<>2
    THEN NULL
  ELSE DATASET.RR
END RR
FROM
DATASET
FULL OUTER JOIN SUB ON A_EXISTS=1
WHERE  DATASET.B=10  
)
SELECT
*
FROM SUB2
WHERE RR IS NOT NULL
...