SQL更新属性

时间:2013-05-04 14:56:46

标签: asp.net sql-server

我有一个里程碑表,主键是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         
     )  ;

1 个答案:

答案 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%你的方法,你需要根据自己的需要进行修改。希望能帮助到你。下次当你问一个问题集中在一个清晰,完整和可理解的问题上时,请更容易。