Главная страница
    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.45 MB
Время: 0.008 c
1-77464
kaif
2002-06-10 23:00
2002.06.24
Message


6-77518
Yakudza
2002-04-16 15:50
2002.06.24
Как вырубить прогу удаленно ?


1-77397
Dark Elf
2002-06-11 12:25
2002.06.24
Большие числа для RSA


6-77516
DED_MAZAI
2002-04-12 22:39
2002.06.24
Как в Win2000 из моей прог. запустить прог. на другом комп.


14-77581
Dimka Maslov
2002-05-20 16:08
2002.06.24
UBPFD





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский