将两个MySQL查询合并为一个查询

将两个MySQL查询合并为一个查询,mysql,Mysql,是否可以将这两个查询合并为一个查询 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 &l

是否可以将这两个查询合并为一个查询

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';
SELECT子句中的用例

SELECT子句中的用例

您可以在金额内使用:

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';
您可以在金额内使用:

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';
像这样使用

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' ;
-马克回答如果这个答案回答了你的问题…

像这样使用

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' ;
-马克回答了如果这个答案回答了你的问题…

试试这个

当debitOrCredit='1'时选择sumcase,当debitOrCredit='2'时选择sumcase,当debitOrCredit='2'时选择amount else 0,当userId='33003'和actionDate在语句中选择debitOrCredit时选择sumcase

当debitOrCredit='1'时选择sumcase,当debitOrCredit='2'时选择sumcase,当debitOrCredit='2'时选择amount else 0,当userId='33003'和actionDate语句中选择debitOrCredit='2'时选择sumcase,当debitOrCredit='2'时选择amount else 0,当。 以下是我在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 ...... ");
    }
谢谢你的帮助。 以下是我在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 ...... ");
    }

title声明了MSQL,但标记了MySQLtitle声明了MSQL,但标记了mysql谢谢您的帮助。Zend Framework中使用的查询如下所示:$sql=$this->\u dba->select->from'statement',array credit=>sumCASE WHEN debitOrCredit='1'然后amount ELSE 0 END,debit=>sumCASE WHEN debitOrCredit='0'然后amount ELSE 0 END->where'userId=?',$userId->where'actionDate感谢您的帮助。Zend框架中使用的查询如下所示:$sql=$this->\u dba->select->from'statement',array credit=>sumCASE WHEN debitOrCredit='1'然后amount ELSE 0 END,debit=>sumCASE WHEN debitOrCredit='0'然后amount ELSE 0 END->where'userId=?',$userId->where'actionDate