2013-09-04 3 views
0

선택한 기준에 따라 하나의 테이블에서 행을 합계하고 결과를 다른 테이블로 옮기는 방법.한 테이블의 행을 합하여 다른 테이블로 이동

표 "비용":

나는 프로젝트 내에서 비용에 관련된 테이블이

id| CostName |ID_CostCategory| PlanValue|DoneValue 
------------------------------------------------------- 
1 | books |1    |100  |120 
2 | flowers |1    |90  |90 
3 | car  |2    |150  |130 
4 | gas  |2    |50  |45 

을 나는 테이블에 "CostCategories"

각 ID_CostCategory의 "DoneValue"의 합을 데려 가고 싶다는

표 "CostCategories"

id|name |planned|done 
------------------------ 
1 |other|190 |takes the sum from above table 
2 |car |200 |takes the sum from above table 

많은 감사

답변

0

: 대신에 참조하는 지금

CREATE VIEW CostCategoriesSum 
AS 
SELECT CostCategories.ID, 
     CostCategories.Name, 
     SUM(COALESCE(Costs.PlanValue, 0)) AS Planned, 
     SUM(COALESCE(Costs.DoneValue, 0)) AS Done 
FROM CostCategories 
     LEFT JOIN Costs 
      ON Costs.ID_CostCategory = CostCategories.ID 
GROUP BY CostCategories.ID, CostCategories.Name; 

을 표를 볼 수 있으며 PlannedDone 합계는 항상 최신입니다.

+0

정말 좋습니다! 감사합니다. "계획"과 "완료"의 차이를 백분율로 편차 열로 표시하는 방법은 무엇입니까? – user2748298

+0

선택 목록에'1.0 * SUM (COALESCE (Cost.Done, 0))/SUM (COALESCE (Cost.PlanValue, 0)) AS Deviation '을 추가하면됩니다 (1.0은 필요하지 않지만 발생할 수있는 2 정수를 나눔으로써. – GarethD

0
INSERT INTO CostCategories(id,name,planned,done) 
SELECT ID_CostCategory, CostName, SUM(PlanValue), SUM(DoneValue) 
FROM costs GROUP BY ID_CostCategory, CostName 
즉시 아무것도 변경 Costs에서 다음 CostCategories가 오래 될 수있는 바와 같이, 대신 내가보기 예를 들어 만들 것 때문에 나는이를 저장하지 않을
관련 문제