Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FastReporte и заданная таблица 
:(
    Опции темы
Salaman
Дата 21.10.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Привет всем помогите очень нужна
 
Можно ли FastReporte сделать такую таблицу заранее благодарен

user posted image

Данные берутся из двух таблиц  структуры такова

Table1               Table2 Тоже такая структура но для конденсата                                                          
КодЦеха                                                                       
Год                                                                               
Месяць
дата
п2 эти поля для ввода двухчасовой информации
п4
п6
п8
п10
п12
п14
п16
п18
п20
п22
п24 


  

Это сообщение отредактировал(а) Salaman - 21.10.2006, 12:09
PM MAIL   Вверх
Aleksej
Дата 21.10.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.10.2006
Где: Киев

Репутация: нет
Всего: нет



если так, то придется динамически создавать колонки. это сложнее. а нельзя ли перевернуть таблицу? т.е. чтоб врядках были месяцы, а в столбцах значения?
PM MAIL ICQ   Вверх
Salaman
Дата 24.10.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Aleksey spasibo za vnimaniye 

Podrobneye obyasni pojaluysta kak delayetsy dinamicheskie kolonki 
PM MAIL   Вверх
Vas
Дата 24.10.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Cross отчет.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 24.10.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Vas nu pomogi plz

Kak FastReport  delat takuyu tablicu ili narisovat chtoli

obyasni podrobneye ya documentaciyu prochital no ne nashel tam otvet 

 

PM MAIL   Вверх
Vas
Дата 24.10.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата
Cross-tab отчет

Этот вид отчета предназначен для печати таблицы, число столбцов которой на этапе построения отчета неизвестно. При формировании отчета столбцы, не поместившиеся на странице, будут перенесены на следующую. Для построения этого отчета разместите на странице бэнд "master data" и бэнд "cross data". Бэнды crossXXX размещаются на странице вертикально. На пересечении бэндов поместите объект, который будет отображаться в качестве ячейки таблицы. Необходимо поместить объект таким образом, чтобы он полностью помещался в границы области пересечения бэндов. 


Это все, что нужно для построения базового отчета. Осталось назначить источники данных для "master data" и "cross data". Если бэнд "cross data" пересекает несколько обычных бэндов, то необходимо назначить источники данных для каждого из бэндов. Как видно, для построения cross-tab отчета необходимо как минимум два набора данных, связанных между собой отношением master-detail. 

Если заглянуть в демо (отчет Cross-tab), то видно назначение бэндов "cross header", "cross footer": footer печатается последним столбцом (например, если нужно отпечатать сумму по строке), а header - первым. Кроме того, если в опциях бэнда "cross header" включен флажок "Выводить на всех страницах", то при переносе широкой таблицы на смежный лист header будет продублирован.

Отчет этого типа может иметь переменную высоту строки данных. Для этого надо включить опцию "растягиваемый" у бэнда "master data". При этом формирование кросс-таблицы будет происходить в два прохода: на первом проходе определяется максимальная высота строки, на втором выполняется вывод данных.



Выдержка из хелпа к FR2.4.  
Только вот структура таблиц не очень понятна, отношение Master-Detail не понятно как придется делать по месяцам. А цеха придется наверное клепать запросами с UNION. И видимо придется заводить таблицу с номерами и названиями месяцов.

Это сообщение отредактировал(а) Vas - 24.10.2006, 15:00


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 25.10.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



To VAS

Стараюсь подробно обяснить. Короче есть три таблица два из них для ввода на каждый день двухчасавой информаций и один  справочник  цехов. Структура такова

Таблица ГАЗ                             Таблица Конденсат              Таблица Справочник

КодЦеха                                    КодЦеха                                    КодЦеха
Год                                            Год                                            Названия Цеха
Месяць                                      Месяць  
дата                                          дата
п2                                              п2   
п4                                              п4
п6                                              п6
п8                                              п8
п10                                            п10
п12                                            п12
п14                                            п14 
п16                                            п16
п18                                            п18 
п20                                            п20
п22                                            п22 
п24                                            п24

Вот чтото делал на запросе только для таблиц газа

select sp.названияцеха, месяць, sum ((п2+п4+п6+п8+п10+п12+п14+п16+п18+п20+п22+п24)) as dayly from таблица.ГАЗ as g join таблица.справочник as sp
on g.кодцеха = sp.кодцеха
where год = 2006 and месяць in (1,2,3,4,5,6,7,8,9,10,11,12)
group by kod, mes 

и в итоге получил три поля названияцеха, месяць, dayly
и
Fast reporte dbcrosstab получился так

user posted image

дальше незнаю что делать ну помогите винградцы мне сделать точно такой отчет на первой рисунке

 
PM MAIL   Вверх
Vas
Дата 25.10.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Salaman, а можешь эти две таблицы прикрепить, а то без базы тяжело пробовать. В твой запрос надо еще прикрутить таблицу с конденсатом. А собственно БД какая? 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 25.10.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



To VAS 
 БД MySQL

Добавлено @ 12:33 
To VAS
если хочешь я отправлю копию мыло дай
PM MAIL   Вверх
Vas
Дата 25.10.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Код

select sp.названияцеха, ' ГАЗ' as type, g.kod, mes, sum ((п2+п4+п6+п8+п10+п12+п14+п16+п18+п20+п22+п24)) as dayly from таблица.ГАЗ as g join таблица.справочник as sp
on g.кодцеха = sp.кодцеха
where год = 2006 and mes in (1,2,3,4,5,6,7,8,9,10,11,12)
group by kod, mes 
UNION
select sp.названияцеха, ' КОНДЕНСАТ' as type, g.kod,  mes, sum ((п2+п4+п6+п8+п10+п12+п14+п16+п18+п20+п22+п24)) as dayly from таблица.КОНДЕНСАТ as g join таблица.справочник as sp
on g.кодцеха = sp.кодцеха
where год = 2006 and mes in (1,2,3,4,5,6,7,8,9,10,11,12)
group by kod, mes 
ORDER BY kod, type, mes

Вот попробуй использовать такой запрос, это объединение из двух почти одинаковых, один для газа второй для конденсата. Сортировкой должны добиться вывода цехов по порядку и по типу.  Только вот UNION поддерживается MySQL c 4 версии, а у меня естьтоки 3  smile работу запроса на мускуле не проверял, на оракуле работает.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 25.10.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



to VAS

Не получается   
PM MAIL   Вверх
Vas
Дата 25.10.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Salaman @  25.10.2006,  13:21 Найти цитируемый пост)
Не получается    

Чего пишет то?


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 26.10.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



 To VAS
 Я писал так
Код
select sp.name,'ГАЗ' as type, g.kod, mes, sum ((p2+p4+p6+p8+p10+p12+p14+p16+p18+p20+p22+p24)) as dayly from gaz as g join spr_ms as sp
on g.kod_ms = sp.kod
where god = 2006 and mes in (1,2,3,4,5,6,7,8,9,10,11,12)
group by kod, mes 
UNION
select sp.name, 'КОНДЕНСАТ' as type, k.kod, mes, sum ((p2+p4+p6+p8+p10+p12+p14+p16+p18+p20+p22+p24)) as dayly from kond as k join spr_ms as sp
on k.kod_ms = sp.kod
where god = 2006 and mes in (1,2,3,4,5,6,7,8,9,10,11,12)
group by kod, mes 
ORDER BY kod, type, mes


Ошибки 
Код
Error Code : 1064
You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '((p2+p4+p6+p8+p10+p12+p14+p16+p18+p20+p22+p24)) as dayly from g
(16 ms taken)



PM MAIL   Вверх
superVad
Дата 26.10.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



может пробел перед ((p2+p4+p6+p8+p10+p12+p14+p16+p18+p20+p22+p24)) не надо ставить
PM MAIL   Вверх
Salaman
Дата 26.10.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Spasibo superVad
 
no chto oznachaet eto

Error Code : 1054
Unknown column 'g.kod' in 'field list'
(328 ms taken)


PM MAIL   Вверх
Akella
Дата 26.10.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Salaman @  26.10.2006,  10:10 Найти цитируемый пост)
Unknown column

это означает что SQL сервер не нашёл такого поля в запрашиваемой таблице

Это сообщение отредактировал(а) Akella - 26.10.2006, 10:43
PM MAIL   Вверх
Salaman
Дата 26.10.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



To VAS

Сработала твой SQL код просто я неправильно написал полей спасибо.

Но теперь как сделать чтобы похож на первой рисунку VAS помоги FastReporte как это делается рисовать мне чета DBCROSS не красива получается  smile  smile 
PM MAIL   Вверх
Vas
Дата 26.10.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Salaman, что именно не устраивает, я так понимаю всего должно идти первой строкой или еще что-то? Для удельного соотношения можешь добавить еще один юнион к результирующему запросу который будет считать удельный вес или делай его как SubDetail с отдельным запросом возвращающим только один цех. Что-то типа такого:
Код

    select g.id_ceh, g.f_month, sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)/
    sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) as udel
    from gas g, konden k
    where g.id_ceh=k.id_ceh and g.f_month=k.f_month and g.f_year=k.f_year and g.id_ceh=1
   group by g.id_ceh, g.f_month

    ID_CEH    F_MONTH       UDEL
---------- ---------- ----------
         1          1 ,089073634

    select g.id_ceh, g.f_month, sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)/
    sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) as udel
    from gas g, konden k
    where g.id_ceh=k.id_ceh and g.f_month=k.f_month and g.f_year=k.f_year and g.id_ceh=2
   group by g.id_ceh, g.f_month

    ID_CEH    F_MONTH       UDEL
---------- ---------- ----------
         2          1 ,089073634

У мене в БД токи 1 месяц вот одна строка и возвращается  smile  Да и к юниону его можно попробовать прикрутить и будет тебе один запрос возвращать по три строчки на каждый цех и месяц. Останется просто нарисовать правильно Cross-tab.

Это сообщение отредактировал(а) Vas - 27.10.2006, 06:44


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 27.10.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



 Поправте  пожалуйста чета у меня ошибки выдает
Код

select sp.name,'Газ' as type, mes, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from gaz as g join spr_ms as sp
on g.kod_ms = sp.kod
where god = 2006 and mes in (1)
group by kod_ms, mes  
UNION
select sp.name, 'Конденсат' as type, mes, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from kond as g join spr_ms as sp
on g.kod_ms = sp.kod
where god = 2006 and mes in (1)
group by  kod_ms,mes
Union 
select g.kod_ms, g.mes, sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)/
    sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) as udel
   from gaz g, kond k
   where g.kod_ms=k.kod_ms and g.mes=k.mes and g.kod_ms in (1,2,3,4,5,6,7,8,9,10,11,12,16)
   group by g.kod_ms, g.mes
ORDER BY  type, mes



Ошибка такая 
Код

Error Code : 1222
The used SELECT statements have a different number of columns
(47 ms taken)


PM MAIL   Вверх
superVad
Дата 27.10.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



а что ты хочеш если у тебя первые 2 запроса по 4 поля выдают, а последний только 3 (учи английский)

на первый взгляд между g.kod_ms и g.mes чегото не хватает  smile 

Это сообщение отредактировал(а) superVad - 27.10.2006, 12:16
PM MAIL   Вверх
Salaman
Дата 27.10.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Oy spasib as type zabyl napisat
PM MAIL   Вверх
Salaman
Дата 31.10.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Привет всем Винградцы!

По правте пожалуйста этот код с параметрамы
Код

select sp.name,'Газ' as type, mes, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from gaz as g join spr_ms as sp
on g.kod_ms = sp.kod
where god = :god and mes in :mes
group by kod_ms, mes  
UNION
select sp.name, 'Конденсат' as type, mes, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from kond as g join spr_ms as sp
on g.kod_ms = sp.kod
where god = :god and mes in :mes
group by  kod_ms,mes
Union 
select sp.name,'Удель' as type,  g.mes, sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)/
    sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) 
   from gaz g, kond k join spr_ms sp on g.kod_ms=sp.kod
   where g.kod_ms=k.kod_ms and g.mes=k.mes and g.kod_ms 
   group by g.kod_ms, g.mes
ORDER BY  type, mes


Ошибка такова
Код

Error Code : 1064
You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ':god and mes in :mes
group by kod_ms, mes  
UNION
select sp.
(0 ms taken)




PM MAIL   Вверх
superVad
Дата 31.10.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



кажеться :mes надо в скобочки взять

а вообще нимогу понять зачем там:
Код
mes in (:mes)

может надо
Код
mes = :mes


или битвин както использовать?

PM MAIL   Вверх
Vas
Дата 31.10.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Salaman, вроде как параметром список значений для оператора IN передать нельзя.
Придется строить строковую переменную примерно так:
Код

str:='(1, 2, 3)
Query.SQL.Add('select sp.name,''Газ'' as type, mes, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly ');
Query.SQL.Add('from gaz as g join spr_ms as sp');
Query.SQL.Add('on g.kod_ms = sp.kod');
Query.SQL.Add('where god = :god and mes in' +str);
Query.SQL.Add('group by kod_ms, mes');
Query.SQL.Add('UNION');
.
.
.
.

И не забудь в третьем твоем запросе тоже условия поставить в инструкцию WHERE
Код

... and g.god=k.god and g.mes=k.mes and g.god=:god and g.mes in ....



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 1.11.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



VAS Спасибо за совет но я делал так ну короче ползователю выходить диалог окно там поставил

одну Edit и одну ComboBox > Items (Январь,Ферваль.....) а собитие  Button написал так
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
MyQuery2.ParamByName('god').AsString:=Edit1.Text;
case ComboBox1.ItemIndex of
0: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 1;
   end;
1: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 2;
   end;
2: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 3;
   end;
3: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 4;
   end;
4: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 5;
   end;
5: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 6;
   end;
6: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 7;
   end;
7: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 8;
   end;
8: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 9;
   end;
9: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 10;
   end;
10: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 11;
   end;
11: begin
   MyQuery2.ParamByName('a').AsInteger:= 1;
   MyQuery2.ParamByName('b').AsInteger:= 12;
   end;
end;
MyQuery2.Execute;
frxreport1.ShowReport(true);


Но одна проблема [B]VAS[B] чета уменя не правильно вычисляеть тоесть делить
Код

select sp.name,'Газ' as type, me.name, mes, 'факт' as fak, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from gaz as g join spr_ms as sp
on g.kod_ms = sp.kod 
join mesac me on mes = me.kod
where god = 2007 and mes between 1 and 2
group by kod_ms, mes  
UNION
select sp.name, 'Конденсат' as type, me.name, mes, 'факт' as fak, sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from kond as g join spr_ms as sp
on g.kod_ms = sp.kod
join mesac me on mes = me.kod
where god = 2007 and mes between 1 and 2
group by  kod_ms, mes
Union
select sp.name,'удель.вых.г/м3' as type, me.name, g.mes,'факт' as fak, sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)
    sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) 
   from gaz g, kond k join spr_ms sp on g.kod_ms=sp.kod join mesac me on k.mes=me.kod
   where g.god = 2007 and g.mes between 1 and 2 and k.god = 2007 and k.mes between 1 and 2 and
   g.kod_ms=k.kod_ms and g.date=k.date
   group by g.kod_ms, g.mes, k.kod_ms, k.mes
ORDER BY  type, mes

 В чем   проблема незнаю 


 
PM MAIL   Вверх
Vas
Дата 1.11.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Точно не могу сказать, попробуй погоняй его один и посмотри что не так попадает, выведи суммы в 2 колонки без деления и посмотри. Или можно один запрос написать из двух вложенных, только не знаю как с этим у MySQL. 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 29.11.2006, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Privet vsem 
To VAS 
Почти закончил другие отчети осталься это очтет и еще пару отчет Толко этот отчет мучает меня  
Сделал  запрос  как ты сказал по одному таблиц суммируются без проблем но вот почемуто когда обеденяю их неправльно вычисляет Вот структуры  две  таблиц с данными на 2008 год для проверки может посмотриш у себя структуры таблиц Делаю так 
Код

select 'удель.вых.м/г3' as type,  g.mes,'факт' as fak,
 sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24))
 /sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly
   from gaz g, kond k 
   where g.god =2008 and g.mes between 1 and 2 and k.god =2008 and k.mes between 1 and 2 and
   g.kod_ms=k.kod_ms and g.mes=k.mes 
   group by g.kod_ms, g.mes
union
select 'Газ' as type, g.mes, 'факт' as fak,
 sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from gaz as g
where god =2008 and mes between 1 and 2
group by g.kod_ms, g.mes  
union
select 'Конденсат' as type, k.mes, 'факт' as fak, 
sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)) as dayly from kond as k
where god = 2008 and mes between 1 and 2
group by  k.kod_ms,k.mes       
ORDER BY  type, mes 

Помоги VAS 

PM MAIL   Вверх
Salaman
Дата 30.11.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



VAS u menya drug dal etot zapros unego tam ORacle rabotaet grit a kak sdelat Mysql ili Vingradsy pomogite plz
Код
select type,mes,'факт' as fak, sum(dayly_k) / decode(sum(dayly_G),0,1,sum(dayly_G))  from(
select g.kod_ms,g.kod_ms||'-удель.вых.м/г3' as type, g.mes, 'факт' as fak,
 sum((g.p2+g.p4+g.p6+g.p8)) as dayly_g ,
0 as dayly_k
 from gaz g
where god =2008 and mes between 1 and 2 
group by g.kod_ms, g.mes  
union
select k.kod_ms,k.kod_ms||'-удель.вых.м/г3' as type, k.mes, 'факт' as fak, 
0 dayly_g,
sum((k.p2+k.p4+k.p6+k.p8)) as dayly_k  from kond  k
where god = 2008 and mes between 1 and 2 
group by  k.kod_ms,k.mes       
) group by  kod_ms,mes, type
union
select g.kod_ms||'-газ,млн.мЗ' as type, g.mes, 'факт' as fak,
 sum((g.p2+g.p4+g.p6+g.p8)) as dayly from gaz  g
where god =2008 and mes between 1 and 2
group by g.kod_ms, g.mes  
union
select k.kod_ms||'-конденсат,тонн' as type, k.mes, 'факт' as fak, 
sum((k.p2+k.p4+k.p6+k.p8)) as dayly from kond  k
where god = 2008 and mes between 1 and 2
group by  kod_ms,mes
ORDER BY  type, mes

 Ya cheta ne ponyal 
PM MAIL   Вверх
ТоляМБА
Дата 30.11.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



1. Узнай про функцию 
Цитата(Salaman @  30.11.2006,  14:41 Найти цитируемый пост)
decode
 - и ищи аналог в MySQL.
2. И еще сорри что не совсем по MySQL, но в MSSQL эта строка
Цитата(Salaman @  30.11.2006,  14:41 Найти цитируемый пост)
group by  kod_ms,mes

должна выглядеть так:
Код
group by  kod_ms,mes ) AS SomeName

А в принципе, если первую строку заменить на
Код

select type,mes,'факт' as fak, sum(dayly_k)  from(

и запрос хотябы отработает, то грабли в п.1, если нет, попробуй п.2

Это сообщение отредактировал(а) ТоляМБА - 30.11.2006, 14:57
PM   Вверх
Salaman
Дата 30.11.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Причину нашел но незнаю как решить
У меня в Газ таблице ежедневно добавляются по две записи для одного месторождения различие только в поле Id_gaz А конденсат таблице ежедневно добавляются по одного записи. Например в таблице Газ kod_ms|9|mes|1|data|2008-01-01|P2|2|....P24|2|id_gaz|2|
                     kod_ms|9|mes|1|data|2008-01-01|P2|2|....P24|2|id_gaz|3| Общая сумма газа за январь 48
А в таблице конденсата 
                     kod_ms|9|mes|1|data|2008-01-01|P2|5|....P24|5| Общая сумма конденсат за январь 60
Теперь делим конденсат на газ=1,25 должно быть а у меня в запросе выходить 2,50 почему так получаеться?   Вот запрос  
Код

select 'удель.вых.м/г3' as type,  g.mes, sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)) /sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly
   from gaz g, kond k 
   where g.god =2008 and g.mes between 1 and 2 and k.god =2008 and k.mes between 1 and 2 and
   g.kod_ms=k.kod_ms and g.mes=k.mes 
   group by g.kod_ms, g.mes
union
select 'Газ' as type, g.mes,
 sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from gaz as g
where god =2008 and mes between 1 and 2
group by g.kod_ms, g.mes  
union
select 'Конденсат' as type, k.mes, 
sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)) as dayly from kond as k
where god = 2008 and mes between 1 and 2
group by  k.kod_ms,k.mes       
ORDER BY  type, mes

 Help хочу  smile  
PM MAIL   Вверх
Vas
Дата 30.11.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Salaman,
g.mes between 1 and 2 (1<=g.mes<=2) берет 2 месяца, а не один может здесь и есть ошибка если только январь брать и k.mes не надо ставить условие, уже стоит g.mes=k.mes, а g.mes у тебя определен условием, попробуй так:
Код

select 'удель.вых.м/г3' as type,  g.mes, sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)) /sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly
   from gaz g, kond k 
   where g.god =2008 and g.mes=1 and k.god =2008  and
   g.kod_ms=k.kod_ms and g.mes=k.mes 
   group by g.kod_ms, g.mes
union
select 'Газ' as type, g.mes,
 sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly from gaz as g
where god =2008 and mes=1
group by g.kod_ms, g.mes  
union
select 'Конденсат' as type, k.mes, 
sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)) as dayly from kond as k
where god = 2008 and mes=1
group by  k.kod_ms,k.mes       
ORDER BY  type, mes


P.S. Salaman, у меня MySQL 3.23 он UNION не поддерживает, поэтому не проверю. Так что дерзай сам. А вообще советую, отладить все три запроса по одному, а потом их объединить, так тебе будет проще. Ну а без UNION гляну, как время будет.

Это сообщение отредактировал(а) Vas - 30.11.2006, 16:44


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 1.12.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



VAS  ты наверно не правильно понял. Я просто показал  за январь. А во всех месяцах проблема с   вычислением  этот месторождением Делаю так как ты сказал по отдельности правильно суммируют но в вычесление 'удельного' вот пример
Код
select 'удель.вых.м/г3' as type,  g.mes,'факт' as fak, sum((k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)) /sum((g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)) as dayly
   from gaz g, kond k 
   where g.god =2008 and g.mes between 1 and 2 and k.god =2008 and k.mes between 1 and 2 and
   g.kod_ms=k.kod_ms and g.mes=k.mes 
   group by g.kod_ms, g.mes


Правильный ответ должен так за январь 1,25 а он почемуто добавляют еще 1,25 и в итого ответ2,50
за февраль парвильный так 1,50 а в этом запросе 3,00
 smile  
PM MAIL   Вверх
Salaman
Дата 2.12.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



VAS  ты как нибудь попробуй на MySQL 3.23 без UNION очень прошу структуры таблиц 
PM MAIL   Вверх
Vas
Дата 4.12.2006, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Salaman, пробуй делать выборку из вложенных запросов, котрые сразу считают суммы, иначе при связи из-за id_gaz записи двоятся из-за неполного указания условий:
Код

select g.kod_ms, g.mes, sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24) as g_sum
   from gaz g  
   where g.god=2008 and g.mes=1
   group by g.kod_ms, g.mes

Код

select k.kod_ms, k.mes, sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) as k_sum
   from kond k  
   where k.god=2008 and k.mes=1
   group by k.kod_ms, k.mes

и еще когда делишь, делитель бери по условию, на 0 делить нельзя сам знаешь, пиши что-то типа
Код

k_sum/if(sum g_sum=0, 1, g_sum) as daily

Самое обидное что и вложенные запросы на 3.23 не пашут, а токи с 4.1 введены smile


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Salaman
Дата 11.12.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Спасибо VAS за понимания и помощь я твой запрос пробовал но не получился короче мне помог один друг как ты оракулист скачал 5 версию Мускула и потом создал View вот запрос 
Код
create view v_gaz as
select kod_ms, god, mes, sana, id_gaz,sum(P2) as P2,sum(P4) as P4,sum(P6) as P6,sum(P8) as P8,sum(P10) as P10,sum(P12) as P12,sum(P14) as P14,sum(P16) as P16 ,    
sum(P18) as P18,sum(P20) as P20,sum(P22) as P22,sum(P24) as P24    
from gaz  
group by kod_ms,god,mes,sana


select g.kod_ms
                ,'удель.вых.м/г3' as type
                ,g.mes,'факт' as fak
                , sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)/sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24) as dayly
  from v_gaz g, kond k 
 where g.god =2008 
   and g.mes between 1 and 2 
      and g.kod_ms=k.kod_ms 
      and g.mes=k.mes 
      and k.god=g.god
group by g.kod_ms, g.mes
union
select g.kod_ms
                ,'Газ' as type
                ,g.mes
                ,'факт' as fak,
                sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24) as dayly 
from       gaz g
where  god =2008 and mes between 1 and 2
group by g.kod_ms, g.mes  
union
select k.kod_ms
                ,'Конденсат' as type
                , k.mes
                ,'факт' as fak
                ,sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) as dayly 
from       kond k
where god = 2008 
and      mes between 1 and 2
group by  k.kod_ms,k.mes       
ORDER BY  kod_ms, type, mes
 Вот теперь правильно вычисляет. Я бы хотел еще спросить наверно это не считается оффтопом VAS как мне теперь сделать общыю сумму ну который в шапке отчете Fastreporte заранее благодарен 
PM MAIL   Вверх
Salaman
Дата 29.1.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



VAS плз этот запрос опять не правильно вычесляет 
 
Код

select g.kod_ms, sp.name,'удель.вых.г/м3' as type, me.name,g.mes,'факт' as fak,
round((sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24)/round(sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)/1000,3))/1000,3) as dayly
  from v_gaz g join v_kond k inner join spr_ms sp on g.kod_ms=sp.kod inner join mesac me on k.mes=me.kod 
 where g.god =2006
   and g.mes=6 
      and g.kod_ms=k.kod_ms 
      and g.mes=k.mes 
      and k.god=g.god
group by g.kod_ms, g.mes
union
select g.kod_ms, sp.name,'Газ' as type, me.name,g.mes,'факт' as fak, round(sum(g.p2+g.p4+g.p6+g.p8+g.p10+g.p12+g.p14+g.p16+g.p18+g.p20+g.p22+g.p24)/1000,3) as dayly 
from gaz g inner join spr_ms as sp on g.kod_ms=sp.kod join mesac as me on g.mes=me.kod 
where  god =2006 and mes=6
group by g.kod_ms, g.mes  
union
select k.kod_ms, sp.name,'Конденсат' as type,me.name, k.mes,'факт' as fak , sum(k.p2+k.p4+k.p6+k.p8+k.p10+k.p12+k.p14+k.p16+k.p18+k.p20+k.p22+k.p24) as dayly 
from  v_kond k  join spr_ms as sp on k.kod_ms=sp.kod join mesac as me on k.mes=me.kod  
where god =2006 
and      mes=6
group by  k.kod_ms,k.mes       
ORDER BY  kod_ms, type, mes


Код

1    Урта-Булок    Газ    Июнь    6                      факт      2.232
1    Урта-Булок    Конденсат    Июнь    6             факт      1248.000
1    Урта-Булок    удель.вых.г/м3    Июнь    6    факт      5.778


Может вложенными запросами поможешь заранее благодарен

PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0969 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.