1 (edited by Xexrby Tdutybq 2016-03-23 08:48:05)

Topic: Нужна помощь в создании отчета

Нужна помощь в создании отчета.

во вкладке отчеты есть 2 отчета.
1 нормально.
2-й не нормально.
в отчете должно формироваться 3 цены (максимальаня. минимальная и средняя)
максимальаня нормально форимруется,
среднюю тоже смогу потом сделать.
не правильно формируется минимальная цена

нужно выбирать минимальные значения игнорируя нулевые значения.

Post's attachments

Attachment icon Нефтепродукты.rar 478.1 kb, 458 downloads since 2016-03-23 

Чучкин Евгений

Re: Нужна помощь в создании отчета

с минимальными и максимальными разобрался.
вот со средним значением оказалось все гораздо сложнее.

есть БД:
Район 1 -  Поселение 1 -  Организация 1 -  цена
Район 1 -  Поселение 1 -  Организация 2 -  цена
Район 1 -  Поселение 1 -  Организация 2 -  цена
Район 1 -  Поселение 2 -  Организация 3 -  цена
Район 1 -  Поселение 2 -  Организация 3 -  цена
Район 1 -  Поселение 2 -  Организация 4 -  цена
Район 1 -  Поселение 2 -  Организация 4 -  цена
Район 2 -  Поселение 3 -  Организация 5 -  цена
Район 2 -  Поселение 3 -  Организация 5 -  цена
Район 2 -  Поселение 3 -  Организация 6 -  цена
Район 2 -  Поселение 4 -  Организация 7 -  цена

задача вывести среднюю цену по каждому району.
алгоритм форимрования средней:
1. сперва формируется средняя цена организации внутри поселения
2. формируется средняя цена по поселению на основании средних цен из п.1
3. форимруется средняя цена по району на основанпии средних цен из п. 3

При этом в итоговом отчете должны быть только группировка по району:
Район 1 - ср.цена
Район 2 - ср. цена

Чучкин Евгений

Re: Нужна помощь в создании отчета

К сожалению я не могу помочь с алгоритмами бизнес процессов, могу помочь только с конкретным вопросом.

Dmitry.

Re: Нужна помощь в создании отчета

алгоритм то я и сам понимаю.
не понимаю как положить этот алгоритм на последовательность операций

Чучкин Евгений

Re: Нужна помощь в создании отчета

Честно говоря не знаю, нужен какой то сложный SQL запрос, можете попробовать обратиться на специализированный форум http://www.sql.ru/forum/sqlite

Dmitry.

Re: Нужна помощь в создании отчета

а есть вариант создания временых таблиц?

Чучкин Евгений

Re: Нужна помощь в создании отчета

Xexrby Tdutybq wrote:

а есть вариант создания временых таблиц?

Увы, не знаю, в вашем случае нужно создать вложенные запросы, типа

SELECT AVG(field) FROM 
  (SELECT AVG(field2) FROM 
     (SELECT AVG(field3) FROM tablename))
Dmitry.

Re: Нужна помощь в создании отчета

Xexrby Tdutybq wrote:

а есть вариант создания временых таблиц?

CREATE TEMPORARY TABLE VremTablitsa
(
id INTEGER PRIMARY KEY , 
Region TEXT ,
Raion TEXT ,
NasPunkt TEXT ,
Magazin TEXT ,
Tsena INTEGER
);

С таблицей можно работать как с обычной только после всех манипуляций надо сделать

DROP TABLE VremTablitsa;

Только учтите что через кнопку можно скормить только один запрос . То есть скормить пачку для расчетов не получится придется скриптом
...можно конечно попробовать сделать вывих мозга и написать один запрос но что-то мне кажется это не получится big_smile .
Так же имеет смысл посмотреть в сторону GROUP BY и его производных.
...если за выходные не напишете то я к вам присоединюсь на следующей неделе ( по наличию свободного времени )

Re: Нужна помощь в создании отчета

Вот что ответили на форуме, но что то я не врубаю как состыковать с моим запросом

with
a1(id_mo, id_posel, id_org, a_80) as (
select id_mo, id_posel, id_org, avg(a_80)
from kash
group by id_mo, id_posel, id_org
),
a2(id_mo, id_posel, a_80) as (
select id_mo, id_posel, avg(a_80) as a_80
from a1
group by id_mo, id_posel
)
select a2.id_mo, max(kash.a_80), min(kash.a_80), avg(a2.a_80)
from a2
join kash on a2.id_mo=kash.id_mo
group by a2.id_mo
;

Чучкин Евгений

Re: Нужна помощь в создании отчета

задача решена через создание 2-х временных таблиц

Чучкин Евгений

Re: Нужна помощь в создании отчета

...Да  big_smile

Post's attachments

Attachment icon Расчет.7z 276.88 kb, 419 downloads since 2016-03-28 

Re: Нужна помощь в создании отчета

В общем Вам подсказали правильно .
...И не так страшен WITH каким он показался )))), оказалось все намного проще 
и можно уложиться в один запрос по кнопке не прибегая к скриптам

http://postgresql.ru.net/manual/queries-with.html
https://msdn.microsoft.com/ru-ru/librar … .120).aspx

пример снизу

Post's attachments

Attachment icon Расчет.7z 277.15 kb, 415 downloads since 2016-03-29 

Re: Нужна помощь в создании отчета

к сожалению моя версия не позволяет открыть Вашу прогу.

Чучкин Евгений

Re: Нужна помощь в создании отчета

1.44 ?

Re: Нужна помощь в создании отчета

В версии 1.44 нет данной процедуры у грида

Form1.TableGrid2.dbSQLExecute;
Dmitry.

16 (edited by iacovlogica 2016-03-29 12:25:02)

Re: Нужна помощь в создании отчета

Для версии 1.44 ( скриптовую часть примера отрезал )

Post's attachments

Attachment icon Расчет.7z 274.73 kb, 432 downloads since 2016-03-29 

Re: Нужна помощь в создании отчета

у меня веселеньки получился код.

with
a1(id_MO, id_posel, id_org,
maxR80,minR80,avgR80,maxZ80,minZ80,avgZ80,
maxR92,minR92,avgR92,maxZ92,minZ92,avgZ92,
maxR93,minR93,avgR93,maxZ93,minZ93,avgZ93,
maxR95,minR95,avgR95,maxZ95,minZ95,avgZ95,
maxRdr,minRdr,avgRdr,maxZdr,minZdr,avgZdr,
maxR98,minR98,avgR98,maxZ98,minZ98,avgZ98,
maxRdi,minRdi,avgRdi,maxZdi,minZdi,avgZdi,
maxRg,minRg,avgRg,maxZg,minZg,avgZg,
date)
as (select MO.id, posel.id, org.id,
max(R_A80), min(R_A80),avg(R_A80),max(Z_A80), min(Z_A80),avg(Z_A80),
max(R_AI92), min(R_AI92),avg(R_AI92),max(Z_AI92), min(Z_AI92),avg(Z_AI92),
max(R_AI93), min(R_AI93),avg(R_AI93),max(Z_AI93), min(Z_AI93),avg(Z_AI93),
max(R_AI95), min(R_AI95),avg(R_AI95),max(Z_AI95), min(Z_AI95),avg(Z_AI95),
max(R_Drive), min(R_Drive),avg(R_Drive),max(Z_Drive), min(Z_Drive),avg(Z_Drive),
max(R_AI98), min(R_AI98),avg(R_AI98),max(Z_AI98), min(Z_AI98),avg(Z_AI98),
max(R_Disel), min(R_Disel),avg(R_Disel),max(Z_Disel), min(Z_Disel),avg(Z_Disel),
max(R_Gaz), min(R_Gaz),avg(R_Gaz),max(Z_Gaz), min(Z_Gaz),avg(Z_Gaz),
strftime('%d.%m.%Y',kash.date) as datekash
from kash
left outer join azs on azs.id=kash.id_azs
left outer join org on org.id=azs.id_org
left outer join posel on posel.id=azs.id_posel
left outer join MO on MO.id=azs.id_MO
where datekash=strftime('%d.%m.%Y',{dataot}) and  kash.gotov=1
group by MO.id, posel.id, org.id),
a2(id_MO, id_posel,
maxR80,minR80,avgR80,maxZ80,minZ80,avgZ80,
maxR92,minR92,avgR92,maxZ92,minZ92,avgZ92,
maxR93,minR93,avgR93,maxZ93,minZ93,avgZ93,
maxR95,minR95,avgR95,maxZ95,minZ95,avgZ95,
maxRdr,minRdr,avgRdr,maxZdr,minZdr,avgZdr,
maxR98,minR98,avgR98,maxZ98,minZ98,avgZ98,
maxRdi,minRdi,avgRdi,maxZdi,minZdi,avgZdi,
maxRg,minRg,avgRg,maxZg,minZg,avgZg)
as (select id_MO, id_posel,
max(maxR80),min(minR80),avg(avgR80),max(maxZ80),min(minZ80),avg(avgZ80),
max(maxR92),min(minR92),avg(avgR92),max(maxZ92),min(minZ92),avg(avgZ92),
max(maxR93),min(minR93),avg(avgR93),max(maxZ93),min(minZ93),avg(avgZ93),
max(maxR95),min(minR95),avg(avgR95),max(maxZ95),min(minZ95),avg(avgZ95),
max(maxRdr),min(minRdr),avg(avgRdr),max(maxZdr),min(minZdr),avg(avgZdr),
max(maxR98),min(minR98),avg(avgR98),max(maxZ98),min(minZ98),avg(avgZ98),
max(maxRdi),min(minRdi),avg(avgRdi),max(maxZdi),min(minZdi),avg(avgZdi),
max(maxRg),min(minRg),avg(avgRg),max(maxZg),min(minZg),avg(avgZg) 
from a1 group by id_MO, id_posel)
select
MO.name,
max(maxR80),min(minR80),avg(avgR80),max(maxZ80),min(minZ80),avg(avgZ80),
max(maxR92),min(minR92),avg(avgR92),max(maxZ92),min(minZ92),avg(avgZ92),
max(maxR93),min(minR93),avg(avgR93),max(maxZ93),min(minZ93),avg(avgZ93),
max(maxR95),min(minR95),avg(avgR95),max(maxZ95),min(minZ95),avg(avgZ95),
max(maxRdr),min(minRdr),avg(avgRdr),max(maxZdr),min(minZdr),avg(avgZdr),
max(maxR98),min(minR98),avg(avgR98),max(maxZ98),min(minZ98),avg(avgZ98),
max(maxRdi),min(minRdi),avg(avgRdi),max(maxZdi),min(minZdi),avg(avgZdi),
max(maxRg),min(minRg),avg(avgRg),max(maxZg),min(minZg),avg(avgZg)
from a2
left outer join MO on MO.id=a2.id_MO
group by MO.id
order by mo.kod

Чучкин Евгений