2012-10-30 5 views
-4

세 개의 테이블이 있으므로 한 테이블의 기본 키와 외래 키를 사용하여이 테이블의 데이터를 선택해야합니다. 그러나 하나의 테이블에는 세 번째 테이블에 많은 데이터가 있습니다. 기본 키의 기본 데이터를 합해야합니다. Table2table3SQL의 SUM 함수

BAl = Balance, met = Method, amo = amount, cst_id, cut_id, cut_i = customer_id 

Table1

이제 우리는 동일한 쿼리에서 10 CUST ID에 대한 방법과 합의에 기초하여 합계해야합니다. 아무도 이것에 나를 도울 수 있습니까?

+0

@MahmoudGamal 내가 테이블에 내가 가지고 – Ashishsingh

+0

의 scema을 표시이 이유 이잖아 같은 시간에 10 고객을 선택하려면 – Ashishsingh

답변

0

샘플 데이터를 제공하면 도움이되는 쿼리를 작성하는 것이 더 쉽습니다. 그러나 MET 필드가 숫자이고 합계를 원한다면 필요합니다. 당신은 하나 개의 번호로 모두 10 개 고객에 대한 데이터를 요약하려면

select 
    t1.cst_n, t2.bal, 
    sum(t3.met) as met, 
    sum(t3.amo) as amo 
from table1 as t1 
    inner join table2 as t2 on t2.cut_id = t1.cst_id 
    inner join table3 as t3 on t3.cut_i = t1.cst_id 
group by t1.cst_n, t2.bal 

잘, 당신은 단지 필요가있을 수 있습니다

select 
    sum(t3.met) as met, 
    sum(t3.amo) as amo 
from table3 as t3 
where t3.cut_i in (select t.customerid from @<your variable table with cust. ids> as t) 
+0

한 고객에게만 제공 할 것입니다 ... 나는 하나의 쿼리에서 10 명의 고객에 대해 동일하게 요구합니다. – Ashishsingh

+1

테스트 데이터를 제공하십시오. 이 쿼리는 고객을'cst_n' (고객 번호라고 가정)별로 그룹화합니다. –

0
;WITH cte 
AS 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (ORDER BY t1.cst_id) RowNum 
    FROM Table1 t1 
    INNER JOIN Table2 t2 
      ON t1.cst_id = t2.cut_id 
    INNER JOIN Table3 t3 
      ON t2.cut_id = t3.customer_id 
      AND t2.BAL = t3.Balance 
      AND t2.amo = t3.amount 
) 
SELECT SUM(*) 
FROM cte 
WHERE RowNum Between 1 AND 10 
-- You can add a GROUP BY here 
+0

cte는 무엇입니까? – Ashishsingh

+0

@Ashishsingh - [Common table expression] (http://msdn.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx)입니다. 가독성을 위해 사용했습니다. 매번 10 명의 고객에 대한 합계를 선택할 수있는 페이지 매김 하위 쿼리를 사용하여 작성할 수 있습니다. –