2012-12-05 4 views
1

Je veux mélanger 2 requêtes SQL, un pour obtenir montant total dans une année donnée, et d'autres de connaître le montant dans un mois donné d'une année donnéemélange deux requêtes SQL

SELECT SUM(money) As Anual FROM Deposito WHERE Year(FechaDeposito)=2011 

SELECT SUM(money) As monthly FROM Deposito WHERE Year(FechaDeposito)= 2011 AND Month(FechaDeposito)=10 

Comment faire de la manière la plus efficace?

+0

Quel est le dialecte SQL que vous utilisez? –

Répondre

3

combinant simplement vos deux requêtes donneraient

SELECT SUM(money) As Anual, 
     SUM(CASE WHEN Month(FechaDeposito)=10 THEN money else 0 end) as monthly 
    FROM Deposito 
WHERE Year(FechaDeposito)=2011 

Il interprétera terriblement cependant. Idéalement, vous voulez un index sur FechaDeposito, et de construire des plages de dates à tester au lieu d'exécuter des fonctions sur la colonne, par ex.

SELECT SUM(money) As Anual, 
     SUM(CASE WHEN Month(FechaDeposito)=10 THEN money else 0 end) as monthly 
    FROM Deposito 
WHERE FechaDeposito >= '2011-01-01' and FechaDeposito < '2012-01-01'