嗨,我有表 sec_profile。我想用某些列填充 sec_profile 中的表 sec_status 。 我正在使用下面的 sql 来做到这一点
INSERT INTO sec_status (ukey, sec_date, active_flag)
SELECT ukey, sec_date,'Y'
FROM sec_profile
这工作正常。截至目前,我正在硬编码 active_flag = Y。我想根据 sec_profile 数据动态填充该标志。 如果 sec_date >= 今天的日期则 active_flag = Y 如果秒_日期< Today's date then active_flag = N
我能够使用单独的 UPDATE 语句来做到这一点,但是我想知道这可以作为我的主 sql 的一部分来完成吗?
问题没有说明当
sec_date
为 NULL
时所需的行为。也没有提及对 NOT NULL
或 sec_date
的 active_flag
约束。完整定义如何处理 NULL
状态非常重要。
如果
sec_date IS NULL
意味着 active_flag
也应该是 NULL
,那么可以使用以下内容:
INSERT INTO sec_status (ukey, sec_date, active_flag)
SELECT ukey,
sec_date,
CASE
WHEN sec_date < CURRENT_DATE THEN 'N'
WHEN sec_date >= CURRENT_DATE THEN 'Y'
END
FROM sec_profile;
如果
sec_date IS NULL
暗示 active_flag
是 'Y'
,则更改 CASE
表达式,如下所示:
INSERT INTO sec_status (ukey, sec_date, active_flag)
SELECT ukey,
sec_date,
CASE
WHEN sec_date < CURRENT_DATE THEN 'N'
ELSE 'Y'
END
FROM sec_profile;
如果
sec_date IS NULL
意味着 active_flag
IS 'N'
,则执行以下操作:
INSERT INTO sec_status (ukey, sec_date, active_flag)
SELECT ukey,
sec_date,
CASE
WHEN sec_date >= CURRENT_DATE THEN 'Y'
ELSE 'N'
END
FROM sec_profile;
当
sec_date
被约束为 NOT NULL
时,所有三个 CASE
表达式都会产生相同的结果。如果遇到 INSERT
NULL
并且 sec_date
有 active_flag
约束,第一个 NOT NULL
语句将引发异常。最后两个 INSERT
语句始终为 active_flag
赋值。