Home
Top.Mail.Ru Yandeks.Metrika
Forum: "Bases";
Current archive: 2002.01.08;
Download: [xml.tar.bz2];

Down

The problem with the preparation of the request and its output in QReport Find similar branches


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

Имеется 3 таблицы
Table1 Реестр животных
id
vid
category
--------------
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
Total: 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;


Respectively
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]

Request
/* Тут в зависимости как хочешь чтобы выглядло*/
/* Вариант 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
UNITY
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
UNITY
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 можно использовать
если у тебя мало категорий и видов и они не будут изменяться,
т.к. они жестко прописанны в коде. Тут это не важно.



Pages: 1 whole branch

Forum: "Bases";
Current archive: 2002.01.08;
Download: [xml.tar.bz2];

Top









Memory: 0.82 MB
Time: 0.027 c
1-22034
Alexey_K
2001-12-15 16:35
2002.01.08
Form


1-22029
neo_
2001-12-18 12:33
2002.01.08
kill tThread


3-21994
Vs
2001-12-06 16:23
2002.01.08
Dynamic array


3-21986
Dreamer
2001-12-06 15:43
2002.01.08
Data Field not permitted on open DataSet


1-22151
What a
2001-12-20 14:06
2002.01.08
MDI -ClientForm





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 Español 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
English French German Italian Portuguese Russian Spanish