2011-11-07 6 views
1

INCOME 및 EXPENSES가 포함 된 유사한 레이아웃의 테이블이 2 개 있습니다. id 열은 고객 ID입니다.JOINS 관련 SQL 관련 문제

고객의 총 금액 (총액)이 필요하며 소득과 비용을 합산해야합니다.

Table: Income 
| id | amountIN| 
+--------------+ 
| 1 | a  | 
| 2 | b  | 
| 3 | c  | 
| 4 | d  | 

Table: Expenses 
| id | amountOUT| 
+---------------+ 
| 1 | -x  | 
| 4 | -z  | 

내 문제는 일부 고객은 내가 오른쪽 위의 예에서 LEFT or RIGHT JOIN.

을해야 할 비용과 다른 사람들에게 단지 수입이 ... 그래서 미리 ID를 알 수 없다는 것입니다 트릭을 할 수있는 가입 상황이 바뀌면 (비용 테이블에서 더 많은 고객) 작동하지 않습니다.

Expected Result 
    | id | TotalAmount| 
    +--------------+ 
    | 1 | a - x | 
    | 2 | b  | 
    | 3 | c  | 
    | 4 | d - z | 

어떤 도움이 필요합니까?

+0

당신은 무엇을 시도? 이것은 집계 함수를 포함하는 간단한 문장입니다. –

답변

6
select id, SUM(Amount) 
from 
(
    select id, amountin as Amount 
    from Income 
    union all 
    select id, amountout as Amount 
    from Expense 
) a 
group by id 
2

전 참여가 문제를 해결할 것으로 믿습니다.

1

당신은 정말 클라이언트와 같은 다른 테이블이 있어야합니다

Table: Client 
| id | 
+----+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 

그래서 당신이 덜 복잡 될 것이라고

SELECT Client.ID, COALESCE(Income.AmountIN, 0) - COALESCE(Expenses.AmountOUT, 0) 
FROM Client c 
LEFT JOIN Income i ON i.ID = c.ID 
LEFT JOIN Expense e ON e.ID = c.ID 

같은 뭔가를 할 수를하고 편리하게 올 것이다 확실 해요 다른 시간 :)

2

나는 이것을 노동 조합으로 접근 할 것이다. 하위 쿼리에서이를 수행 한 다음 합계하십시오. 예를 들어

는 :

select id, sum(amt) from 
(
    select i.id, i.amountIN as amt from Income i 
    union all 
    select e.id, e.amountOUT as amt from Expenses e 
) 
group by id