2012-10-17 6 views
1

Est-il possible de combiner ces deux requêtes en une seule requête?Combiner deux requêtes MySQL à une

SELECT sum(amount) as credit FROM statement WHERE userId= '33003' AND debitOrCredit = '1' AND actionDate <= '2012-10-17'; 

SELECT sum(amount) as debit FROM statement WHERE userId= '33003' AND debitOrCredit = '0' AND actionDate <= '2012-10-17'; 

donc j'obtenir le résultat:

| credit | debit | 
| 90 | 60 | 
+2

titre 'a déclaré MSQL' mais marqué' mysql' – Neverever

Répondre

3

Vous pouvez utiliser CASE au sein de votre SUM:

SELECT sum(CASE WHEN debitOrCredit = '1' THEN amount ELSE 0 END) as credit, 
     sum(CASE WHEN debitOrCredit = '0' THEN amount ELSE 0 END) as debit 
FROM statement WHERE userId= '33003' AND actionDate <= '2012-10-17'; 
+0

Merci de l'aide. La requête utilisée dans Zend Framework ressemble: $ sql = $ this -> _ dba-> select() \t -> de ('déclaration', tableau ( \t \t \t somme "crédit" => »(CASE WHEN debitOrCredit = '1' montant alors ELSE 0 END) » \t \t \t "débit"=> "somme (CASE WHEN debitOrCredit = '0' montant alors ELSE 0 END)")) \t -> où (» userId =? ', $ userId) \t -> où (' actionDate <=? ', $ date); \t \t essayer \t { \t \t $ result = $ this-> db-> fetchRow ($ sql); \t} \t catch (Exception $ e) { \t \t \t throw new Exception ("Erreur sur ...."); \t} – Haver

2

utilisation CASE dans votre SELECT clause

SELECT sum(CASE WHEN debitOrCredit = '1' THEN amount ELSE 0 END) as credit, 
     sum(CASE WHEN debitOrCredit = '0' THEN amount ELSE 0 END) as debit 
FROM statement 
WHERE userId= '33003' AND 
     actionDate <= '2012-10-17'; 
0

Utilisez comme ça.

SELECT sum(a.amount) as credit,sum(b.amount) as debit FROM statement a left join statement b 
on a.userId=b.userId 
WHERE a.userId= '33003' AND a.debitOrCredit = '1' AND b.debitOrCredit = '0' AND a.actionDate <= '2012-10-17' AND b.actionDate <= '2012-10-17' ; 

- Mark a répondu si cette réponse répond à votre question ...

-1

Essayez cette

SELECT sum(case when debitOrCredit = '1' then amount else 0 end) as credit, sum(case when debitOrCredit = '2' then amount else 0 end) as debit FROM statement WHERE userId= '33003' AND actionDate <= '2012-10-17'

0

Merci pour votre aide. Voici comment je l'ai utilisé dans le Zend Framework:

$sql = $this->_dba->select() 
    ->from('statement', array(
     "credit" => "sum(CASE WHEN debitOrCredit = '1' THEN amount ELSE 0 END)", 
     "debit" => "sum(CASE WHEN debitOrCredit = '0' THEN amount ELSE 0 END)")) 
    ->where('userId = ?', $userId) 
    ->where('actionDate <= ?', $date); 

    try 
    { 
     $result = $this->db->fetchRow($sql); 
     //process result here  
    } 
    catch (Exception $e) 
    { 
     throw new Exception("Error on ...... "); 
    }