2011-09-16 4 views
0

J'ai 3 tables Tablle1, Table2, Table3. Tableau1 & Le tableau2 est lié par Id1. Tableau2 & Tableau3 sont liés par Id2.Requête SQL avec calculs

  1. J'ai la requête suivante qui fonctionne. Comment puis-je obtenir CTotal = C00 + C01 + C02?

  2. Où puis-je ajouter les instructions OUTPUT pour renvoyer les valeurs de Stotal & cTotal?

SELECT X.Id1, X.S00, X.S01, X.S02, X.S00 + X.S01 + X.S02 AS STOTAL, 
     CEILING(X.S00/@Size) AS C00, CEILING(X.S01/@Size) AS C01, 
     CEILING(X.S02/@Size) AS C02, 
     Tble1.Select00, Table1.Select01, Table1.Select02 

FROM(
    SELECT Table1.Id1, 
     SUM(CASE WHEN Table1.Select00 = 1 THEN Table3.Num00 ELSE 0 END) AS S00, 
     SUM(CASE WHEN Table1.Select01 = 1 THEN Table3.Num01 ELSE 0 END) AS S01, 
     SUM(CASE WHEN Table1.Select02 = 1 THEN Table3.Num02 ELSE 0 END) AS S02 
    FROM Table1 INNER JOIN 
       Table2 ON Table1.Id1 = Table2.Id1 INNER JOIN 
      Table3 ON Table2.Id2 = Table3.Id2 
     WHERE (Table1.Id1 = @Id1 
    ) 
    GROUP BY Table1.Id1) AS X INNER JOIN Table1 ON X.Id1 = Table1.Id1 
+0

Où est C03 dans votre requête? Je ne le vois pas. – Icarus

Répondre

3

Vous pouvez simplement ajouter CEILING(X.S00/@Size) + CEILING(X.S01/@Size) + ... AS CTotal ou utiliser la table dérivée:

SELECT a.*, a.C01+a.C02+a.C03 AS CTotal FROM 
(
    [your_old_query] 
)a 

Une autre alternative à la table dérivée - CTE (expression de table commune)

+0

Je vais être paresseux et ne pas taper le reste de ma réponse depuis @ a1ex07 à peu près fait pour moi: D. À votre santé. –

+0

Juste une chose, puisque C01 à C03 sont définis dans la requête interne, la requête externe n'a-t-elle pas besoin de la référencer comme 'a.C01 + a.C02 + a.C03'? –

+0

@Anthony Accioly: vous avez raison, il est préférable de faire référence avec alias (pas nécessaire cependant dans ce cas, une seule "table"). Fixation... – a1ex07

0

Enveloppez la requête avec un plus externe sélectionner et ajouter tous ensemble.