оператор case в предложении where для возврата набора результатов включает пустые значения - PullRequest
0 голосов
/ 24 мая 2019

я делаю отчет яшмы, который фильтрует по нескольким параметрам, которые являются необязательными, с использованием оператора case в предложении where. если параметр не введен, я хочу, чтобы набор результатов удовлетворял другим параметрам, включая нулевые значения.

Я сделал оператор case в предложении where. За исключением моего последнего условия, я получаю результаты, которые хочу. когда параметр пуст, я хочу, чтобы в результате были выполнены другие условия b, включая нулевые записи, которые удовлетворяются другим условием в предложении where

SELECT
cert.ice_certificate_date_issued AS "START_DATE",
cert.ice_current_license_expiry AS "END_DATE",
--licence_type,
ib.name AS "SHOP",
cert.ice_license_fee AS "SUPERMARKETPRICE",
dist.name AS "DISTRICT",
,iba.ice_price)
,0) AS "ACTIVITY_PRICE",
(select nvl(sum(taxamt),0) from c_ordertax where c_order_id = cert.c_order_id) AS "TAXAMT"
FROM icp_certificate cert
LEFT JOIN c_order ord ON cert.c_order_id = ord.c_order_id
LEFT JOIN icp_business ib ON cert.ice_foreign_trx_entity_id = 
ib.icp_business_id
LEFT JOIN c_bpartner cbp ON cert.c_bpartner_id = cbp.c_bpartner_id
LEFT JOIN c_bpartner_location cbpl ON cert.c_bpartner_id = 
cbpl.c_bpartner_id
LEFT JOIN icp_district dist ON cbpl.ice_district_id = 
dist.ice_district_id
LEFT JOIN c_location loc on ib.c_location_id = loc.c_location_id
LEFT JOIN icp_business_activity_link ibal ON ib.icp_business_id = 
ibal.icp_business_id
LEFT JOIN icp_business_activity iba ON ibal.icp_business_activity_id = 
iba.icp_business_activity_id
WHERE
cert.ad_client_id = 1000555 AND
cert.ad_org_id = 2010520 AND
cert.icp_certificate_status = '01' AND
cert.isactive = 'Y' AND
cert.ice_certificate_type = '0051' AND
cert.ice_currentcertificate = 'Y' AND
cert.icp_certificate_date_issued BETWEEN '01-JAN-19' AND '23-MAY-19' AND
ib.ICp_District_ID = CASE WHEN 0>0 THEN 46445665 else ib.ICp_District_ID 
END

- я хочу, чтобы остальная часть включала запись, где ib.ICp_District_ID равен нулю

возвращает результат всего, что находится в других условиях, включая записи с идентификатором района, равным нулю

1 Ответ

0 голосов
/ 24 мая 2019

Мне кажется, вы можете использовать

.
.
.
(ib.ICp_District_ID = CASE
                        WHEN 0>0 THEN 46445665
                        else ib.ICp_District_ID 
                      END
 OR
 ib.ICp_District_ID IS NULL)

, который можно упростить до

NVL(ib.ICp_District_ID, -99) = NVL(ib.ICp_District_ID, -99)

, потому что выражение CASE всегда будет возвращать ib.ICp_District_ID.Это можно еще больше упростить, просто опуская условие, которое полностью проверяет ib.ICp_District_ID, потому что оно всегда будет выполняться.(Предполагая, конечно, что вы намереваетесь оставить условие WHEN 0 > 0 на месте в выражении CASE, которое всегда ЛОЖЬ, поэтому оно всегда будет соответствовать ELSE).

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...