Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Бази";
Поточний архів: 2002.01.08;
Завантажити: [xml.tar.bz2];

Вниз

Проблема зі складанням запиту і виведенням його в QReport Знайти схожі гілки


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

Є 3 таблиці
Table1 Реєстр тварин
id
від
категорія
--------------
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
СОЮЗ
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
СОЮЗ
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.57 MB
Час: 0.026 c
1-22253
Yakudza
2001-12-17 14:34
2002.01.08
Як в Паскалі обчислити факторіал?


3-21930
Roman55
2001-12-04 16:37
2002.01.08
БДЕ


1-22255
Дмитро Катаєв
2001-12-14 14:51
2002.01.08
Як впровадити новий пункт меню в IE, який викликається по правій кнопці (як у Reget, наприклад)


1-22244
Socol
2001-12-15 15:42
2002.01.08
Завантаження файлу!


1-22180
Нафаня
2001-12-21 11:07
2002.01.08
Проблемка!





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська