我有一个里程碑表,主键是Id_milestone,还有一个表,其中的外键是id_milestone。对于每个任务,我以百分比表示完成。里程碑还具有完成属性百分比。我需要以100%更新里程碑的完成情况,直到他们完成所有任务设置为100%。我有一个DropDownList,间隔为10%,用户更新进度。抱歉我的英文。
CREATE TABLE Milestone
(
ID_milestone INTEGER NOT NULL ,
Nazev_milniku VARCHAR2 (30) ,
) ;
CREATE TABLE Milestone_complete
(
ID_milestone INTEGER NOT NULL ,
Completed INTEGER
) ;
CREATE TABLE Tasks
(
ID_tasks INTEGER NOT NULL ,
ID_milestone INTEGER NOT NULL ,
Name_task VARCHAR2 (30) ,
) ;
CREATE TABLE Tasks_complete
(
ID_task INTEGER NOT NULL ,
Completed INTEGER
) ;
答案 0 :(得分:0)
这将使用您所有任务的百分比来计算里程碑的百分比。
UPDATE [milestones]
SET [percentage] = (SELECT AVG(pecentage) FROM [tasks] WHERE [tasks].[id_milestone] = [milestones].[id])
如果你想设置例如像[已完成]这样的状态标志你可以这样做:
UPDATE [milestones]
SET [completed] = (CASE WHEN (SELECT AVG(pecentage) FROM [tasks] WHERE [tasks].[id_milestone] = [milestones].[id]) = 100 THEN 1 ELSE 0 END)
这只是猜测你想要什么,因为你没有完全向我们展示你的桌子,结构等。 希望它有所帮助。
修改强>
您的表Milestone
需要一列percentage
,或者您想将结果写在另一个表Milestone_complete中?我不明白为什么你有这些额外的表。
因此,我们猜测您的percentage
表格中有一列Milestone
。在这种情况下,SQL是这样的:
UPDATE [Milestone]
SET [percentage] = (SELECT AVG(pecentage)
FROM [Tasks]
WHERE [Tasks].[ID_milestone] = [Milestone].[ID_milestone])
如果你想在Completed' column in the
Milestone_complete`表中写下结果,那就这样做:
UPDATE [Milestone_complete]
SET [percentage] = (SELECT AVG(pecentage)
FROM [Tasks]
WHERE [Tasks].[ID_milestone] = [Milestone].[ID_milestone])
FROM [Milestone_complete]
JOIN [Milestone] ON [Milestone].[ID_milestone] = [Milestone_Complete].[ID_milestone]
或者,如果里程碑的所有任务都是100%,您是否只想将结果插入Milestone_Complete
?
我不知道你是否已在强制表中有记录或需要添加以防万一。
我假设你有一个,并希望将完成设置为例如1(0 =未完成)。
UPDATE [Milestone_complete]
SET [completed] = 1
FROM [Milestone_complete]
JOIN [Milestone] ON [Milestone].[ID_milestone] = [Milestone_Complete].[ID_milestone]
WHERE (SELECT AVG(percentage)
FROM [Tasks]
WHERE [Tasks].[ID_milestone] = [Milestone].[ID_milestone])=100
我没有对它进行任何测试,所以不确定它是否有效,但由于我不是100%你的方法,你需要根据自己的需要进行修改。希望能帮助到你。下次当你问一个问题集中在一个清晰,完整和可理解的问题上时,请更容易。