我是该站点和SQL的新手。我需要一些有关案例表达的帮助。
要求如下:
我有一个表T1,其中有两个日期列-eff和disc;
第二个表T2具有2个日期列-on_date和off_date;
我正在尝试构建一个单例表达式,可以在两个表之间比较日期列并根据某些条件分配值。
条件是:
•如果T1.eff和T2.disc日期设置为默认日期,即T1.eff = 1/1/1970和T2.disc = 1970
Then set set T1.eff=T2.on_date and T2.disc=T2.off_date
•如果T1.eff> T2.on_date和T1.disc> T2.off_date
Then set T1.disc=T2.Off_date.
•如果T1.eff
Then set T1.eff=T2.On_date.
•如果T1.eff T2.off_date
Then set T1.eff=T2.On_date and T1.disc=T2.Off_date
•如果T1.eff> T2.on_date和T1.disc
Then do not update eff, disc dates, insert as is.
我开始编写一个Case表达式,并且对如何构建/编写块感到困惑;我需要将“ eff”和“ disc”日期作为一个条件进行比较,然后在单个大小写表达式中将相应的值分别分配给“ eff”和“ disc”。
SELECT
CASE T1.EFF, T1.DISC
WHEN T1.EFF = TO_DATE('01/01/1970', 'MM/DD/YYYY') AND DISC = TO_DATE('01/01/1970', 'MM/DD/YYYY')
THEN T1.EFF = T2.ON_DATE AND T1.DISC = T2.OFF_DATE
WHEN T1.EFF > T2.ON_DATE AND T1.DISC > T2.OFF_DATE
THEN T1.EFF = T1.EFF AND T1.DISC = T2.OFF_DATE
WHEN T1.EFF < T2.OFF_DATE AND T1.DISC > T2.OFF_DATE
THEN T1.EFF = T2.ON_DATE AND T1.DISC = T2.OFF_DATE
WHEN T1.EFF > T2.ON_DATE AND T1.DISC < T2.OFF_DATE
THEN T1.EFF = T1.EFF AND T1.DISC - T1.DISC
END,
T2.ON_DATE, T2.OFF_DATE
FROM T2, T1
WHERE T1.A = T2.B
ETC。
我不确定我们是否可以在单个case表达式中获取/使用两列。
Oracle DB-客户端版本:12.1.0.2.0
预先感谢! => VPPG
答案 0 :(得分:0)
我认为您想要的是修改SELECT输出中显示的$("#datetimepicker").kendoDateTimePicker({
format: "dd/MM/yyyy HH:mm",
parseFormats: ["dd/MM/yyyy", "HH:mm"],
min: new Date(),
dateInput: true
});
和EFF
的值。使用单个case语句很难做到这一点,因为您想更改2列的输出。但是,如果您简化逻辑,仍然可以使其保持简单。
DISC
还要注意,我使用的是SELECT
CASE WHEN T1.EFF = TO_DATE('01/01/1970', 'MM/DD/YYYY') AND DISC = TO_DATE('01/01/1970', 'MM/DD/YYYY')
THEN T2.ON_DATE
WHEN T1.EFF < T2.OFF_DATE AND T1.DISC > T2.OFF_DATE
THEN T2.ON_DATE
ELSE T1.EFF
END as EFF,
CASE WHEN T1.EFF > T2.ON_DATE AND T1.DISC < T2.OFF_DATE
THEN T1.DISC
ELSE T2.OFF_DATE
END as DISC,
T2.ON_DATE, T2.OFF_DATE
FROM T2, T1
WHERE T1.A = T2.B;
表达式的另一种形式-有两种使用方法。
如果这不能真正解决您的问题,请告诉我,我将更新答案。