Вот эти два долбанных запроса надо было организовать в Delphi. Теорию я не знал совершенно. за 10 часов с перерывами я освоил основы :) Теперь у меня рабочая программа. правда пока не красивая.
========================
требуется
построить SQL-запрос, который обеспечивал бы фильтрующий поиск информации по
названию организации и по названиям городов почтового и юридического адреса.
(Следует учесть, что поля могут заполняться в разных регистрах). И фильтр может быть пустым.
select
t_f.name, TUser.City_Name(t_f.jur_city_id), TUser.City_Name(t_f.post_city_id)
from tuser.firm t_f
where
(:FIRM_NAME is NULL
or
upper(t_f.name)=upper(:FIRM_NAME)
)
and
(:CITY_NAME_JUR is NULL
or
t_f.jur_city_id=
(select t_c.city_id
from TUser.city t_c
where
upper(t_c.name)=upper(:CITY_NAME_JUR)
)
)
and
(:CITY_NAME_POST is NULL
or
t_f.post_city_id=
(select t_c.city_id
from TUser.city t_c
where
upper(t_c.name)=upper(:CITY_NAME_POST)
)
)
Order by t_f.name
Где:
create or replace function CITY_NAME(iden number)
return varchar2 is
result varchar2(120) :='';
begin
select
upper(t.name)
into result
from TUser.City t
where t.city_id=iden;
return result;
end;
========================
Требуется
построить SQL-запрос, который обеспечивал бы вывод в шахматном виде (табличном)
просуммированной информации (SUM) таблицы DOCUMENT. Столбцами таблицы должны быть
МЕСЯЦы документов, строками должны быть ГОДа документов. Требуется ограничить
документы по организациям (Поле DOCUMENT.FIRM_ID). Ограничение может быть пустым.
SELECT to_char(t.doc_date,'YYYY'),
SUM(CASE to_char(t.doc_date,'mm') WHEN '01' THEN t.sum ELSE 0 END) "Jan",
SUM(CASE to_char(t.doc_date,'mm') WHEN '02' THEN t.sum ELSE 0 END) "Feb",
SUM(CASE to_char(t.doc_date,'mm') WHEN '03' THEN t.sum ELSE 0 END) "Mar",
SUM(CASE to_char(t.doc_date,'mm') WHEN '04' THEN t.sum ELSE 0 END) "Apr",
SUM(CASE to_char(t.doc_date,'mm') WHEN '05' THEN t.sum ELSE 0 END) "Mai",
SUM(CASE to_char(t.doc_date,'mm') WHEN '06' THEN t.sum ELSE 0 END) "Jun",
SUM(CASE to_char(t.doc_date,'mm') WHEN '07' THEN t.sum ELSE 0 END) "Jul",
SUM(CASE to_char(t.doc_date,'mm') WHEN '08' THEN t.sum ELSE 0 END) "Aug",
SUM(CASE to_char(t.doc_date,'mm') WHEN '09' THEN t.sum ELSE 0 END) "Sep",
SUM(CASE to_char(t.doc_date,'mm') WHEN '10' THEN t.sum ELSE 0 END) "Oct",
SUM(CASE to_char(t.doc_date,'mm') WHEN '11' THEN t.sum ELSE 0 END) "Nav",
SUM(CASE to_char(t.doc_date,'mm') WHEN '12' THEN t.sum ELSE 0 END) "Dec"
FROM TUser.Document t
where t.firm_id in
(select t_f.firm_id
from tuser.firm t_f
where
(:FIRM_NAME is NULL
or
upper(t_f.name)=upper(:FIRM_NAME)
)
and
(:CITY_NAME_JUR is NULL
or
t_f.jur_city_id=
(select t_c.city_id
from TUser.city t_c
where upper(t_c.name)=upper(:CITY_NAME_JUR)
)
)
and
(:CITY_NAME_POST is NULL
or
t_f.post_city_id=
(select t_c.city_id
from TUser.city t_c
where upper(t_c.name)=upper(:CITY_NAME_POST)
)
)
)
GROUP BY to_char(t.doc_date,'YYYY')
order by to_char(t.doc_date,'YYYY')
Комментариев нет:
Отправить комментарий