Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FastReporte и заданная таблица 
:(
    Опции темы
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   Вверх
Страницы: (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.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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