Конференция "Базы" » запрос [D6]
 
  • Леха2 (11.11.10 15:36) [0]
    Имеется представление, в котором, предположим, есть 3 поля:
    Num (номер)
    Value (кол-во)
    Type (тип. Где 0-приход, 1-расход)

    Задача: просчитать общее количество с учетом прихода и расхода.

    В данный момент я расчитываю так:

    Сумма прихода  =  select sum(Value) from таблица where Type=0
    Сумма расхода  =  select sum(Value) from таблица where Type=1


    Общая = Сумма прихода - Сумма расхода

    Можно ли делать еще быстрее? Предположим, не двумя запросами, а одним?
    В общем, рассмотрю любые варианты.

    Спасибо!
  • sniknik © (11.11.10 15:39) [1]
    > Предположим, не двумя запросами, а одним?
    если субд/движок поддерживает то почему бы и нет? хотя постой, у тебя же нет субд/движка. НЕЛЬЗЯ!

    > В общем, рассмотрю любые варианты.
    используй субд.
  • Леха2 (11.11.10 15:48) [2]
    >у тебя же нет субд/движка

    Есть. Я ж написал, использую представление. Firebird использую в качестве БД.

    >то почему бы и нет

    И как он будет выглядеть?
  • 12 © (11.11.10 15:54) [3]
    select sum(Value), Type from таблица group by Type
  • sniknik © (11.11.10 16:03) [4]
    > select sum(Value), Type from таблица group by Type
    это возможно будет дольше чем типа (смотря как индексы по полю учасnвуют) -
    select
     sum(case when Type=0 then Value else  0 end) as sum1,
     sum(case when Type=1 then Value else  0 end) as sum2
    from таблица

  • Petr V. Abramov © (11.11.10 16:06) [5]

    > Type (тип. Где 0-приход, 1-расход)

    делаем  
    1

    -приход,
    -1

    -расход
    теперь
    select sum(value*type) from таблица

    дает искомое
  • 12 © (11.11.10 16:24) [6]

    > делаем  1 -приход, -1 -расход
    > теперь
    > select sum(value*type) from таблица дает искомое

    тоже хотел сказать!
    но, блин, автор последнюю строчку

    > Общая = Сумма прихода - Сумма расхода

    как код не выделил, и ее не прочитал внимательно :)
  • Леха2 (11.11.10 16:48) [7]
    Спасибо всем! Помогло.
Есть новые Нет новых   [134431   +15][b:0][p:0.001]