Mysql Query для получения значений с помощью оператора if - PullRequest
0 голосов
/ 18 января 2012
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';

Здесь я хочу выбрать сумму суммы всех from_ledger = 1, и в следующем столбце должна отображаться сумма суммы всех to_ledger = 1, но здесь дал и / или в условии получить те же данные, в Dbздесь из ledger = 1, тогда результат равен 7000 и toledger = 1, тогда он будет равен 0, но в приведенном выше запросе извлекаются два столбца с одинаковым значением, например 0 или 7000

1 Ответ

0 голосов
/ 19 января 2012

Похоже, ваш запрос немного беспорядок.Вы выполняете запрос из одной и той же таблицы дважды, но нет условия JOIN, которое приведет к декартовому результату.Я думаю, что вы ищете, чтобы в вашей таблице «Счет-фактура» было два столбца ... «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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...