Oracle SQL,其中条件权重
创建表格Oracle SQL,其中条件权重,oracle,select,Oracle,Select,创建表格 DROP TABLE mytable; CREATE TABLE mytable ( product_code VARCHAR2(20 BYTE) NOT NULL ENABLE, priority NUMBER NOT NULL ENABLE, date_act DATE, date_dis DATE ); 填充表格 INSERT INTO mytable (product_code, priority, date_act, date_di
DROP TABLE mytable;
CREATE TABLE mytable
(
product_code VARCHAR2(20 BYTE) NOT NULL ENABLE,
priority NUMBER NOT NULL ENABLE,
date_act DATE,
date_dis DATE
);
填充表格
INSERT INTO mytable (product_code, priority, date_act, date_dis) VALUES ('bla', '0', TO_DATE('2019-01-01', 'YYYY-MM-DD'), TO_DATE('2019-01-31', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_act, date_dis) VALUES ('bla', '1', TO_DATE('2019-02-01', 'YYYY-MM-DD'), TO_DATE('2019-02-28', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_act) VALUES ('bla', '2', TO_DATE('2019-01-01', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_act) VALUES ('bla', '3', TO_DATE('2019-02-01', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_dis) VALUES ('bla', '4', TO_DATE('2019-01-31', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_dis) VALUES ('bla', '5', TO_DATE('2019-02-28', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority) VALUES ('bla', '6');
INSERT INTO mytable (product_code, priority) VALUES ('bla', '7');
现在我只需要一行,使用两个输入参数(或变量)product\u code
和date\u submit
我正在使用OR连接器,但我需要根据date\u act
和date\u dis
值定义一些条件权重(实际上不包括在mytable
中)
如果条件权重4为true
,则左侧(3
,2
和1
)将被忽略
如果条件权重4为假
且条件权重3为真
,则条件权重2和条件权重1将被忽略
如果条件_权重4和3为false
且条件_权重2为true
将忽略条件_权重1
如果条件权重4、3和2为false
a仅对条件权重1进行评估
预期结果。。。
从mytable中选择*
其中产品代码=:产品代码
及(
截止日期(:提交日期,'yyyy/mm/dd'),介于生效日期和发布日期之间——条件重量4
或(截止日期(:DATE\u submit,'yyyy/mm/dd')=日期和日期为空)--条件权重2
或者(日期dis为空,日期act为空)——条件权重1
)
ROWNUM我检查了你的第二个图像表,结果
var date_submit varchar2(12);
exec :date_submit := '2019/12/31';
var product_code varchar2(12);
exec :product_code := 'bla';
SELECT resp.*, :date_submit FROM (
SELECT 4 condition_weight, mytable.priority prio, mytable.* FROM mytable
WHERE product_code = :product_code
AND TO_DATE (:date_submit, 'yyyy/mm/dd') BETWEEN date_act AND date_dis
UNION
SELECT 3 condition_weight, mytable.priority prio, mytable.* FROM mytable
WHERE product_code = :product_code
AND TO_DATE (:date_submit, 'yyyy/mm/dd') <= date_dis AND date_act IS NULL
UNION
SELECT 2 condition_weight, mytable.priority prio, mytable.* FROM mytable
WHERE product_code = :product_code
AND TO_DATE (:date_submit, 'yyyy/mm/dd') >= date_act AND date_dis IS NULL
UNION
SELECT 1 condition_weight, mytable.priority prio, mytable.* FROM mytable
WHERE product_code = :product_code
AND date_dis IS NULL AND date_act IS NULL
ORDER BY condition_weight DESC, prio DESC
) resp
WHERE ROWNUM <= 1
;
2019/02/15
CONDITION_WEIGHT PRIO PRODUCT_CODE PRIORITY DATE_ACT DATE_DIS :DATE_SUBMIT
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
4 0 bla 0 01-JAN-19 31-JAN-19 2019/01/15
CONDITION_WEIGHT PRIO PRODUCT_CODE PRIORITY DATE_ACT DATE_DIS :DATE_SUBMIT
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
4 1 bla 1 01-FEB-19 28-FEB-19 2019/02/15
2018/12/31
CONDITION_WEIGHT PRIO PRODUCT_CODE PRIORITY DATE_ACT DATE_DIS :DATE_SUBMIT
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
3 5 bla 5 28-FEB-19 2018/12/31
CONDITION_WEIGHT PRIO PRODUCT_CODE PRIORITY DATE_ACT DATE_DIS :DATE_SUBMIT
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
2 3 bla 3 01-FEB-19 2019/12/31
2019/12/31
CONDITION_WEIGHT PRIO PRODUCT_CODE PRIORITY DATE_ACT DATE_DIS :DATE_SUBMIT
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
3 5 bla 5 28-FEB-19 2018/12/31
CONDITION_WEIGHT PRIO PRODUCT_CODE PRIORITY DATE_ACT DATE_DIS :DATE_SUBMIT
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
2 3 bla 3 01-FEB-19 2019/12/31
我认为你的条件符合你的要求。您的查询有什么问题?请以表格文本而不是图像的形式提供示例数据。还有,你说你只想要一行,但是你的结果是4行,为什么?