2012-10-30 1 views
-4

Il existe trois tables, nous devons sélectionner les données de ces tables en utilisant une clé primaire et une clé étrangère. Mais dans la table il y a beaucoup de données dans la troisième table. Nous devons additionner les données sur la base de la clé primaire.Fonction SUM dans SQL

Table1Table2table3

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

Maintenant, nous devons résumer la sur la base de la méthode et la somme de 10 id Cust dans la même requête. Quelqu'un peut-il m'aider à ce sujet?

+0

@MahmoudGamal des thats raison pour laquelle j'ai afficher le scema de la table – Ashishsingh

+0

j'ai pour sélectionner 10 clients en même temps – Ashishsingh

Répondre

0

Si vous donnez des exemples de données, il sera plus facile d'écrire des requêtes pour vous aider. Mais si votre champ MET est numérique et que vous voulez l'additionner, alors vous en avez besoin.

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 

bien si vous voulez résumer les données pour l'ensemble des 10 clients en un seul numéro, peut vous être avez juste besoin

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

il donnera pour un seul client .... Je demande la même chose pour 10 clients dans une requête – Ashishsingh

+1

s'il vous plaît donner des données de test. cette requête regroupant les clients par 'cst_n' (numéro de client supposé) –

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

ce qui est avec cte? – Ashishsingh

+0

@Ashishsingh - C'est [expression de table commune] (http://msdn.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx), je l'ai utilisé, juste pour la lisibilité, et pour la pagination pour vous permettre de sélectionner la somme pour 10 clients à chaque fois. Vous pouvez l'écrire en utilisant une sous-requête. –