2013-05-04 70 views
0

我有一個里程碑表,其中的主鍵是Id_milestone和一個表中的外鍵是id_milestone的任務。對於每項任務,我都按百分比歸屬完成。里程碑也有百分比完成的屬性。我需要將完成的里程碑更新爲100%,直到他們完成所有任務設置爲100%。我有一個間隔10%的DropDownList,用戶更新進度。對不起我的英語不好。SQL更新屬性

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

你怎麼知道任務完成?你有更多的專欄嗎?請在你的問題上添加它。 – 2013-05-04 14:57:59

回答

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) 

這僅僅是一個猜測你想要什麼,你沒comppletely告訴我們你的表,結構等 希望它能幫助。

編輯

你的表Milestone需要一列percentage還是你想寫的結果在其他表Milestone_complete?我不明白你爲什麼有這些額外的表格。 所以我們猜你在Milestone表中有一列percentage。在這種情況下,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%你的方法,你需要修改你自己的需要。希望能幫助到你。下一次你問一個問題集中在一個清晰,完整和可以理解的問題上時,讓它更容易。

+0

這可行,但從所有任務中選擇所選的平均百分比。 – Mirek 2013-05-04 15:29:44

+0

但這是它應該如何工作恕我直言。如果您希望獲得里程碑的總百分比,請獲取所有任務的平均值。如果您僅選擇100%的平均值,那麼您的里程碑平均值也將爲100,這不會告訴您任何有用的信息。 – YvesR 2013-05-04 16:02:30

+0

如果我有2個里程碑,並且此里程碑1有2個任務,完成100%,里程碑2有2個任務,完成0%,則選擇平均50%並且不插入任何內容。 – Mirek 2013-05-04 16:32:40