Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL-запрос [D7, IB6.x]


Страницы:   1 2 3

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 :(


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо