2012-03-18 7 views
0

이 SQL 함수는 새로운 기능입니다. 나는 다음과 같은 테이블을 가지고있다.부분합이 포함 된 sql 테이블

Table dataTable 

caseID Title staffID staffName Date  Budget Actual 
------ ------ ------- --------- ---------- ------ ------ 
413  Week 1 1213  Jackson 1990-10-07 1000 1000 
413  Week 1 1214  Jeckson 1990-10-07 2000 1500 
413  Week 2 1215  Jickson 1990-10-07 1000 1500 
414  Week 2 1216  Jockson 1990-10-08 1500 1000 
414  Week 2 1217  Juckson 1990-10-08 2000 1000 

다음과 같은 결과가 필요합니다.

는 테이블의 모든 세부 사항을 표시뿐만 아니라, 사람이 코드를 도와 줄 수

caseID staffID staffName Date  Budget Actual totalBudget totalActual 
------ ------- --------- ---------- ------ ------ ----------- ----------- 
413  1213  Jackson 1990-10-07 1000 1000 
413  1214  Jeckson 1990-10-07 2000 1500 
413  1215  Jickson 1990-10-07 1000 1500 4,000  2,500 
414  1216  Jockson 1990-10-08 1500 1000 
414  1217  Juckson 1990-10-08 2000 1000 3,500  1,000 

caseID에 의해 총 예산과 실제 총 그룹을 보여? 나는 그것을 할 수 없다. 고맙습니다.

ps : 정말 미안합니다.이 모든 정보를 표에 표시하는 방법을 모르겠습니다.

+1

일부 엔진은 LEAD 및 LAG 기능을 지원하므로 여기에 도움이됩니다. (OR - 보고서 작성자 사용) – Randy

+0

mysql을 사용하고 있습니다 – user1276898

+0

방금 ​​해결책을 찾았지 만, 제가 생각해 낸 부분합은 4000과 2500 대신 4,000과 2,500이되었습니다. 누군가가 나를 어떻게 변환할지 말해 줄 수 있습니까? 이 형식? 고마워요. – user1276898

답변

0

(t-sql의 ROLLUP과 같은) SQL에 대한 데이터베이스 관련 확장 기능이 있습니다.하지만이 플랫폼에서 충분한 정보를 제공하지 않았기 때문에 다음과 같이 작동 할 수있는 SQL 솔 루션을 제공합니다. 플랫폼이 중첩 된 (파생 된) 테이블을 지원하는 한 오래.

예를 들어 결과에 해당 시점에 전체 라인을 배치하는 논리가없는 것처럼 보이므로 모든 행에 관련 결과를 추가하기 만하면됩니다.

SELECT a.caseID, a.staffID, a.staffName, a.Date, a.Budget, a.Actual, 
    b.totalBudget, b.totalActual 
FROM tbl a INNER JOIN (
    SELECT caseID, SUM(Budget) as totalBudget, SUM(Actual) as totalActual 
    FROM tbl 
    GROUP BY caseID 
) b ON a.caseID = b.caseID 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 위의 코드에서 모든 행에 "totalbudget"및 "totalactual"이 표시됩니다. 나는 그것이 caseid의 마지막 행에서만 보여지기를 바란다. 이 경우 413 1215 및 414 1217 행만 표시됩니다. 가능한가? – user1276898

+0

우리 아빠는 각 경우에 대한 총 예산과 총 실제 비용을 보여주고 싶어하고 눈이 조금 어지러워지기 때문에 전체가 모든 단일 라인을 표시하는 것을 원하지 않습니다. – user1276898

3

이 시도 :

select 
    t1.caseID, t1.staffID, t1.staffName, t1.Date, t1.Budget, t1.Actual, 
    format(t2.totalBudget, 0) TotalBudget, format(t2.totalActual, 0) TotalActual 
from t t1 left join (
    select caseID, max(staffId) staffId, sum(Budget) totalBudget, 
    sum(Actual) totalActual from t 
    group by caseID 
) t2 on t1.caseID = t2.caseID and t1.staffId = t2.staffId 

결과는 다음과 같습니다

+--------+---------+-----------+------------+--------+--------+-------------+-------------+ 
| CASEID | STAFFID | STAFFNAME | DATE | BUDGET | ACTUAL | TOTALBUDGET | TOTALACTUAL | 
+--------+---------+-----------+------------+--------+--------+-------------+-------------+ 
| 413 | 1213 | Jackson | 07-10-1990 | 1000 | 1000 |    |    | 
| 413 | 1214 | Jeckson | 07-10-1990 | 2000 | 1500 |    |    | 
| 413 | 1215 | Jickson | 07-10-1990 | 1000 | 1500 |  4,000 |  4,000 | 
| 414 | 1216 | Jockson | 08-10-1990 | 1500 | 1000 |    |    | 
| 414 | 1217 | Juckson | 08-10-1990 | 2000 | 1000 |  3,500 |  2,000 | 
+--------+---------+-----------+------------+--------+--------+-------------+-------------+ 

당신은 어떤 문제가 있다면 알려주세요.

추 신 : 실제 총 수는 잘못되었습니다. 질문을 업데이트해야합니다