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

Вниз

Проблема с составлением запроса и выводом его в QReport   Найти похожие ветки 

 
Andrey Pogorelov   (2001-12-02 10:49) [0]

Имеется 3 таблицы
Table1 Реестр животных
id
vid
categoria
--------------
id vid categoria
1, 1, 2
2, 1, 2
3, 2, 1
--------------
Table2 Виды животных
id
name
--------------
1, Собаки
2, Кошки
--------------
Table3 - Категории животых
id
name
--------------
1, Домашнее
2, Бездомное
--------------
Необходимо подсчитать кол-во животных в базе, кол-во домашних и бездомных по видам и результаты поместить в QReport
те получить в виде
Вид Домашнее Бездомное
Собаки 0 2
Кошки 1 0
Всего: 3
Помогите очень надо, заранее Огромное спасибо.


 
asafr   (2001-12-03 15:14) [1]

Берешь TQuery, обзываешь, например qr_Work. Пишешь запрос:
SELECT VID, CATHEGORY, COUNT(*) AS SUM_ FROM TABLE1
GROUP BY VID, CATHEGORY
- этот qr_Work объявляешь источником для QReport. Результат запроса:
VID CATHEGORY SUM_
1 2 2
2 1 1

В QReport in DetailBand делаешь так:
----------------------------------------
<--DetailHeader
VID Cathegory Sum_
----------------------------------------
<-- Detail Band
[QRLabel1] [QRLabel2] [QRDBText1]
----------------------------------------
QRDBText1 - связываешь с полем Sum_

В Events QRLabel1 пишешь:
procedure TForm1.QRLabel1Print(sender: TObject; var Value: String);
begin
if qr_Work.FirldByName("vid").AsInteger=1 then QRLabel1.Caption:="Собаки"
else QRLabel1.Caption:="Кошки"
end;


Соответственно
procedure TForm1.QRLabel2Print(sender: TObject; var Value: String);
begin
if qr_Work.FirldByName("cathegory").AsInteger=1
then QRLabel2.Caption:="Домашнее"
else QRLabel2.Caption:="Бездомное"
end;



Ну а ВСЕГО: - можно найти несколькими путями. Либо используй QRExpr, либо на QRDBText1Print приплюсовывай значения Sum_ каждой строчки. Только перед печатью не забывай делать Sum_:=0 - ибо тогда значения каждой распечатки будут приплюсовываться друг к другу.



 
Dick Gonsales   (2001-12-04 03:14) [2]

Запрос
/* Тут в зависимости как хочешь чтобы выглядло*/
/* Вариант 1 */
SELECT T3.name, T2.name, count(T1.*)
FROM T3, T2, T1
WHERE T3.id=T1.categoria and T2.id=T1.vid
GROUP BY T3.name, T2.name
UNION
SELECT T3.name, " Итого", count(T1.*)
/* пробел дабы правильно сработал order by*/
FROM T3, T1
WHERE T3.id=T1.categoria
GROUP BY T3.name
ORDER BY T3.name
/* Категория1 Вид1 кол-во */
/* Категория1 Вид2 кол-во */
/* Категория1 Итого кол-во */
/* Категория2 Вид1 кол-во */
/* Категория1 Вид2 кол-во */
/* Категория1 Итого кол-во */

/* Вариант 2 */
SELECT T2.name, T3.name, count(T1.*)
FROM T3, T2, T1
WHERE T3.id=T1.categoria and T2.id=T1.vid
GROUP BY T2.name, T3.name
UNION
SELECT T2.name, " Итого", count(T1.*)
FROM T2, T1
WHERE T2.id=T1.vid
GROUP BY T2.name
ORDER BY T2.name
/* Вид1 Категория1 кол-во */
/* Вид1 Категория2 кол-во */
/* Вид1 Итого кол-во */
/* Вид2 Категория1 кол-во */
/* Вид2 Категория2 кол-во */
/* Вид2 Итого кол-во */



Запрос вешаешь на Report, и расписываешь поля,
а в принципе можешь воспользоваться
дельфийским мастером для генерации Report
используя выше описаный SELECT и он тебе все сделает.

Вариант который предложил asafr можно использовать
если у тебя мало категорий и видов и они не будут изменяться,
т.к. они жестко прописанны в коде. Тут это не важно.



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

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

Наверх









Память: 0.82 MB
Время: 0.035 c
6-22282
Mamed
2001-10-08 10:08
2002.01.08
ПОМОЩ ПОМОЩ!!! до 01/11 Как написат программу для работы в Pocket CE?


4-22475
Di_wind
2001-11-02 16:08
2002.01.08
Поиск


4-22459
YUS
2001-11-01 03:13
2002.01.08
Мастера, помогите..


14-22403
Burmistroff
2001-11-11 20:13
2002.01.08
Супер справочник по Delphi -2. Ваше мнение, please.


1-22004
KhLexa
2001-12-17 17:57
2002.01.08
Глюки





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