ПредишенСледващото

В този случай, проблемът е, че DENGI колона трябва да бъде разделена на две колони, за да се изчисли крайната сума. "Челен" решение изглежда така:

  1. Искането се прави за доходите: Изберете Име, DENGI ОТ ПАРИЧНИТЕ КЪДЕ DENGI> = 0.
  2. След това, че е отправено искане за разходи: Изберете Име, DENGI ОТ ПАРИЧНИТЕ КЪДЕ DENGI.
  3. След това изчислява общото количество на доход: SELECT SUM (DENGI) ОТ КОИТО CASH DENGI> = 0.
  4. И най-накрая, общата сума на разходите: SELECT SUM (DENGI) ОТ ПАРИЧНИТЕ КЪДЕ DENGI.
  5. Получените резултати от множество запитвания заедно в клиентско приложение в таблицата.

Общо отне пет запитвания. Използването на временни таблици тук е най-ефективното решение. За FIREBIRD решение ще бъде:

Вторият подход е да се използва комбинация за избрани и съхранение на променливи запомнени процедури предишните стойности на полетата на таблицата.

Съответният процедурата ще бъде както следва:

Като специален случай на първите два подхода, следва да се отбележи възможността за използване на вградения отчет на дружеството за SELECT INTO направите:

В този случай, ако ние тълкуваме за избрани като един вид "временна" на маса, а след това тази привързаност дава възможност да се работи с няколко "временни" таблици. Например, ако се извършва в отделна таблица подробна документация на друг член на семейството в една и съща маса структура, като пари в брой. но с CASH2 на име:

е да се съберат част от общия сбор на двама членове на семейството под формата на:

можете да приложи следната процедура:

Третият подход се използва в случаите, когато не е възможно при условията на предварително извличане на проблемното вид. След това организира псевдо временна таблица с необходимите полета в процедурата се извършва първия си пълнене, след което направете необходимата обработка в тази таблица записи. Ето решение на проблема, породен от разглеждането на втория подход, като се използва псевдо временни таблици:

Резултатът от процедурата:

Тъй като по някаква причина в таблицата за TEMP може да остане стари записи "сираци", ще трябва да го почистите периодично (тук трябва да използвате поле TDATE), например, както следва:

Премахване на записи "сираци" по-стари от 10 дни

Разбираемо е, че третият подход е най-бавно от всички, тъй като преминаването на КЕШ маса се извършва два пъти, също така направи вложка и актуализиране на записите в таблицата с псевдо време и едва след това на изхода на резултата. Това също се добавя към задачата да гарантира редовното миене на маса TEMP. Първото и второто изпълнение ще бъде управлявана със скорост почти значително bystree- записи за вземане на проби. Опитът показва, че индексирането ПАРИЧНИТЕ маса на проверени полето Име би довело до първите резултати от запитването след няколко секунди дори за маси с много записи, за да бъде около 10 милиона. Strings. В същото време, когато третият подход, към момента на получаването на първите записи ще бъде след няколко секунди по-дълго в таблиците с броя на записите на около 10 хиляди души. Strings. Например, следните резултати (IBExpert програма данни) са получени чрез извършване ITOG2 ITOG4 и процедури за изпитване в горните примери:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!