2012-01-18 9 views
0
select 
     IFNULL(sum(invoice0_.INV_AMT),0) as col_0_0_,IFNULL(sum(invoice1_.INV_AMT),0) as col_0_0_ 
    from 
     hrmanager.invoice invoice0_, 
     hrmanager.invoice invoice1_ 
    where 
     invoice0_.FROM_LEDGER=1 
     **or** invoice1_.TO_LEDGER=1 
     and (
      invoice0_.INV_DATE between '1900-12-20' and '2012-01-30' 
     ) 
     and invoice0_.ACTIVE='Y' 
     and invoice0_.COMP_ID=2 
     and invoice1_.COMP_ID=2 
     and invoice0_.INV_TYPE='CLIENT' 
     and invoice1_.INV_TYPE='CLIENT'; 

は私がすべてのto_ledger = 1の量の合計を表示する必要があるすべてのfrom_ledger = 1、次の列の金額の合計を選択したい場合は、使用して値を取得しますが、ここで与えた、および/または中にします条件は同じデータを取得します。ここでledger = 1からDbで結果が7000とtoledger = 1の場合は0になりますが、上記のクエリは2つの列が0または7000と同じ値を取りますMySQLのクエリは、ここで声明

答えて

0

クエリ混乱のビットです。同じ表から2回クエリーを実行していますが、JOIN条件がないためデカルト結果になりません。私はあなたのテーブル "Invoice"に2つのカラムがあることをあなたが探していると思っています... "To_Ledger"と "From_Ledger"、 "INV_AMT"、および他のいくつかのフィールド...これにより、あなたの答え。

select 
     sum(if(inv.From_Ledger = 1, inv.Inv_Amt, 0)) as FromInvoiceAmounts, 
     sum(if(inv.To_Ledger = 1, inv.Inv_Amt, 0)) as ToInvoiceAmounts 
    from 
     hrmanager.invoice inv 
    where 
      1 in (inv.From_Ledger, inv.To_Ledger) 
     AND inv.inv_date between '1900-12-20' and '2012-01-30' 
     and inv.Active = 'Y' 
     and inv.Comp_ID = 2 
     and inv.Inv_Type = 'CLIENT'