Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Вниз

Хитрый репорт-2   Найти похожие ветки 

 
Manul   (2002-05-30 22:38) [0]

Прошу прощения за недостаточность первого вопроса.
Дело обстоит гораздо сложнее.
Для большей ясности приведу пример отчета
Group header
Налоговая инспекция
Group header
Штраф
Detail
Статья 146 2 2500
Статья 152 3 1200
Group footer
Количество штрафов 5
На сумму 3700
Group header
Предупреждение
Detail
Статья 121 3
Статья 176 3
Group footer
Количество предпреждений 6
На сумму
Group footer
Количество протоколов по Налоговая инспекция 11
На сумму 3700

Соответственно каждому протоколу соответствует одна запись в базе. Как посчитать количество протоколов и суммы в отчете?


 
fnatali   (2002-05-31 06:01) [1]

Как вообще выглядит структура базы? То есть в одном протоколе у тебя и штраф и предупреждение? Если это так, то сначала сделай запрос с использованием union - для штрафов и для предупреждений с группировками. Затем, как и советовали ранее - QRExpr. Например
select ...,sum(кол) where pole="штрафы" group by ...
union
select ...,sum(кол) where pole="предупреждения" group by ...


 
Manul   (2002-05-31 07:12) [2]

To fnatali
База достаточно проста как таковая.
Есть несколько таблиц, одна из которых основная все остальные справочники. В основной таблице храню номер протокола, фамилию нарушителя, название организации составителя, статью КоАП, вид взыскания, сумма взыскания (если это штраф), признак оплаты.
По осдному составителю могут быть и предупреждения и штрафы. Предупреждения и штрафы могут быть по одинаковым статьям. Вот и не получается в отчете получить суммарное кол-во протоколов по каждой статье, взысканию, составителю. И суммы по взысканию, составителю.
Вот запрос котороый я использую:
SELECT sost.sost, vzys.vzys, stat.stat, sum(prot.summa) as summa
FROM prot INNER JOIN sost on prot.n_sost=sost.n_sost
INNER JOIN stat ON prot.n_stat=stat.n_stat
INNER JOIN vzys ON prot.n_vzys=vzys.n_vzys
where prot.d_pos between "01.01.2002" and "31.01.2002"
GROUP BY sost.sost, vzys.vzys, stat.stat
ORDER BY sost.sost


 
Deniz   (2002-05-31 07:53) [3]

ORDER BY sost.sost - не надо
Для кол-ва нужно добавить count(prot.№протокола) поле <№протокола> должно быть заполнено всегда.
Если я правильно понял vzys.vzys - вид взыскания (штраф/предупр).
Вроде все. Теперь имеем запрос типа:

SELECT sost.sost, vzys.vzys, stat.stat, count(prot.№протокола) as kolvo, sum(prot.summa) as summa
FROM prot INNER JOIN sost on prot.n_sost=sost.n_sost
INNER JOIN stat ON prot.n_stat=stat.n_stat
INNER JOIN vzys ON prot.n_vzys=vzys.n_vzys
where prot.d_pos between "01.01.2002" and "31.01.2002"
GROUP BY sost.sost, vzys.vzys, stat.stat

Попробуй.


 
kaif   (2002-05-31 13:13) [4]

Изначально неверно организована финансовая информация в таблице. Неверно использовать такие вещи, как признак оплаты. Нужно иметь два поля
1) сумма начисленная
2) сумма оплаченная
Тогда все получишь простым запросом:

SELECT
COUNT(*), SUM(<начислено>), SUM(<оплачено>), <несчастный>
FROM <таблица>
GROUP BY <несчастный>

К тому же учти, что возможны ситуации спорные, например, начислена одна сумма, а оплачена другая (по ошибке или намеренно). Тогда твой флаг "оплачено" вообще потеряет смысл.
Пока не поздно, добавь второе поле, а флаг выкинь к чертям.
Если же нужно иметь еще какие-то признаки, например,
"1-е предупреждение"
"2-е предупреждение" и т. п.
"наезд с запугиванием несчастных"
то для этого придется отдельные колонки заводить с информацией о количестве таких акций и тогда опять все будет суммироваться таким же запросом.
Хотя, по правде говоря, чем все это медленнее работать будет, тем оно лучше...:))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-77588
savva
2002-05-22 10:48
2002.06.24
П Р И З Ы В !!! Модераторам и Мастерам !!!


3-77298
АндрейП
2002-05-30 20:18
2002.06.24
TreeView for some DataSet s


3-77284
Meduza
2002-05-27 15:28
2002.06.24
Kak razpoznatj sistemnogo administratora


14-77570
PVOzerski
2002-05-21 10:42
2002.06.24
Что-то не то в отображении списка ответов в


1-77368
Stas Ant
2002-06-13 13:19
2002.06.24
Чужая Dll, в win98 работает а в W2K и W2K Server пишет что библи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский