阅读 47
MySQL集|每日一题:使用 SQL,操作项目工程相关数据

MySQL集|每日一题:使用 SQL,操作项目工程相关数据

项目表

项目编码项目名称项目进度项目状态完成时间
Pro001长城贴瓷砖45%正在执行NULL
Pro002赤道镶金边75%正在执行NULL

项目执行表

单据号当天完成总量进度(非累计)单据时间项目编码
P100120%2016-01-05Pro001
P100225%2016-01-06Pro001
P200125%2016-05-13Pro002
P200250%2016-05-16Pro002

如果 2016-05-20 完成 ‘赤道镶金边’ 项目总进度的 25%。

1.请将该业务描述增加到项目执行表。

INSERT INTO 项目执行表
  (单据号, 当天完成总量进度, 单据时间, 项目编码)
VALUES
  ('P2003', 25, '2016-05-20', 'Pro002');
复制代码

2.更新 '赤道镶金边' 项目的最新进度。

UPDATE
  项目表
SET
  项目进度 = 项目进度 + 25
WHERE
  项目名称 = '赤道镶金边';
复制代码

3.当前 '赤道镶金边' 项目进度为 100% 时,项目状态变更为 ‘已完结’,完成时间为最新一次的项目执行时间。

UPDATE
  项目表 t1
SET
  项目状态 = '已完结',
  完成时间 = (SELECT MAX(单据时间) FROM 项目执行表 WHERE 项目编码 = t1.项目编码)
WHERE
  项目名称 = '赤道镶金边'
  AND 项目进度 = 100;
复制代码

4.查询 '长城贴瓷砖' 项目 2016-01-06 时当天完成进度(用项目名称作为查询条件)。

SELECT
  t1.当天完成总量进度
FROM
  项目执行表 t1,
  项目表 t2 
WHERE
  t1.项目编码 = t2.项目编码 
  AND t1.单据时间 = '2016-01-06' 
  AND t2.项目名称 = '长城贴瓷砖';
复制代码

补充: 对上述的第 2 小题及第 3 小题,可以提前为 '项目执行表' 定义好一个触发器,这样当新增项目执行记录时,就会自动更新 '项目表' 的项目最新进度,并对进度达到 100% 的项目设定项目状态为已完结,设定项目完成时间为最新一次的项目执行时间。

触发器: 是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

DELIMITER $$
CREATE TRIGGER tri_项目执行表_i AFTER INSERT ON 项目执行表 FOR EACH ROW
BEGIN
  UPDATE
    项目表
  SET
    项目进度 = 项目进度 + NEW.当天完成总量进度,
    项目状态 = CASE WHEN 项目进度 = 100 THEN '已完结' END,
    完成时间 = CASE WHEN 项目进度 = 100 THEN (SELECT MAX(单据时间) FROM 项目执行表 WHERE 项目编码 = NEW.项目编码) END
  WHERE
    项目编码 = NEW.项目编码;
END $$
DELIMITER ;
复制代码

友情提示: 题目来源于各家真实企业,以上回答仅供参考,不能确定是否符合出题人要考查的知识点!

文章分类
后端
文章标签