![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос [D7, IB6.x]
ligor © (2004-07-01 16:03:00)Добрый день Мастера Delphi
Подскажите можно ли в запросе подсчитать сумму,
если приход помечен "П", а расход "Р"
Пример
Id Summ KodPl
1 10 П
2 20 П
3 15 Р
4 8 П
5 22 Р
ligor (2004-07-01 17:32:00) [21]Пробовал по рекомедациям
перевести базу на FB1.5
все заглючело и перестало работать
(скорее всего глючу сам, опыт работы очень маленький ну очень)
Пробавал ставить этот сервер дома все пршло успешно
а вот на работе где много уже работающих программ не
получается :-((((
Fay (2004-07-01 17:26:00) [22]2ligor (01.07.04 17:08) [24]
Что мешает домучивать на FB?
ligor (2004-07-01 17:08:00) [23]Убедили
Следующию разработку по возможности начну на FB15
а эту придется так домучивать
Спасибо
Sandman25 (2004-07-01 17:04:00) [24][22] ligor (01.07.04 16:59)
Вы считаете, что
select sum(case kodpl when 'П' then Summ else -Summ end)
from table
менее понятно, чем
let summa = 0;
select sum(Summ)
into SumPrih
from table
where CodPl='П';
if SumPrih is not null then
let summa = summa + sumPrih;
end if;
select sum(Summ)
into SumRash
from table
where CodPl='Р';
if SumRash is not null then
let summa = summa - sumrash;
end if;
suspend;
?
ligor (2004-07-01 16:59:00) [25]Согласен на все сто
Но ассемблер тоже быстрее
а большенство выбирают Delphi(мне так кажется)
Sandman25 (2004-07-01 16:56:00) [26][20] ligor (01.07.04 16:55)
Описать логику может быть и проще, а работать может будет и медленнее. Все зависит от запроса и от текста SPL, на который этот запрос заменяется.
ligor (2004-07-01 16:55:00) [27][17] Sandman25 © (01.07.04 16:46)
прикольно :)
конечно прикольно только в IB6.Х
нет case
зато есть ХП(процедуры)
которые могут возвращать набор данных
при этом описать логику возвращаемых данных
на мой взгляд легче
чем в SQL запросе на 40 строчек:-))
Sandman25 (2004-07-01 16:54:00) [28]Есть еще другой синтаксис case:
select sum(case when when kodpl='П' then Summ else -Summ end)
from table
но в данном случае работает и первый (более эффективный в общем случае наличия >2 вариантов)
Соловьев (2004-07-01 16:50:00) [29]
> [17] Sandman25 © (01.07.04 16:46)
прикольно :)
Sandman25 (2004-07-01 16:46:00) [30]select sum(case kodpl when 'П' then Summ else -Summ end)
from table
ligor (2004-07-01 16:45:00) [31]Уважаемые мастера спасибо
Запрос по времени не критичен
База чужая
У меня обычно приход с плюсом, расход с минусом
Sum считает великолепно
Здесь же время от времени нужно посчитать итоги
Почему пердидущий разработчик выбрал такой способ я незнаю
Сейчас проблема решена так
в процедуре считаем sum расход потом sum приход
потом вычитаем одно из другого,
но пока не посмотрел на запрос г. Соловьева не доходило :-))
Соловьев (2004-07-01 16:44:00) [32]
> [14] Sandman25 © (01.07.04 16:42)
та нет, запрос:)
Sandman25 (2004-07-01 16:42:00) [33]С case будет один проход по таблице.
Без case будет 2 прохода, по одному для каждого из запросов вида select sum
Соловьев (2004-07-01 16:39:00) [34]интересно а как с case?
Sandman25 (2004-07-01 16:34:00) [35][10] Соловьев © (01.07.04 16:32)
Индексы по полю с 2 возможными значениями только вредят, поэтому в лучшем случае будет полное сканирование таблицы.
При использовании case каждая запись будет считываться только 1 раз.
Соловьев (2004-07-01 16:33:00) [36]не-а, хотя тут индексы не нужны:)
Соловьев (2004-07-01 16:32:00) [37]А ,че, работать будет шустренько если индексы будут :)
А с casae разве быстрее будет?
Sandman25 (2004-07-01 16:28:00) [38][8] Fay © (01.07.04 16:28)
или iif, который вроде бы есть в IB7
Fay (2004-07-01 16:28:00) [39]2Sandman25 © (01.07.04 16:25) [7]
> Вот до чего доводит отсутствие case :(
...который есть в FB15
Sandman25 (2004-07-01 16:25:00) [40]:)
Вот до чего доводит отсутствие case :(