Головна сторінка
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.037 c
1-22065
переможець
2001-12-19 07:30
2002.01.08
про WebBrowser


1-22194
мистецтво
2001-12-15 09:28
2002.01.08
Просотой питання!


1-22109
avr555
2001-12-19 17:17
2002.01.08
ComboBox в Grid


4-22472
Євген
2001-10-27 17:03
2002.01.08
Як зробити свій маленький проксі-сервер?


1-22112
greenrul
2001-12-15 13:55
2002.01.08
Підкажіть компонент Button





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