Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2009, 07:25   #1
MAKSA
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 14
По умолчанию помогите составить SQL запрос!!!!

Есть две таблици AGENT(с полями FIO_AGENT, TEL_AG), ARENDA_KVARTIR(с полями INF, FIO_SOBSNVENIK, TEL_SOBSNVENIK, FIO_AGENT).
Мне надо вывести в одну таблицу INF и FIO_SOBSNVENIK, TEL_SOBSNVENIK, если FIO_AGENT='Иванов И. И.', либо INF и FIO_AGENT, TEL_AGENT, если FIO_AGENT<>'Иванов И. И.'.

Объясню для чего это надо: есть риелторская бд по аренде квартир, с ней работают N агентов. Допустим агент прошел автаризацию, ему выводиться список всех квартир(и его и других агентов) причём если это его кв. то он видит контактные данные собственника, а если нет то только контактные данные агента который работает с этим собственником.
MAKSA вне форума Ответить с цитированием
Старый 06.08.2009, 07:41   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
select INF , FIO_SOBSNVENIK, TEL_SOBSNVENIK 
from ARENDA_KVARTIR
where FIO_AGENT='Иванов И. И.'

либо
select INF ,FIO_AGENT, TEL_AGENT
from AGENT
where FIO_AGENT<>'Иванов И. И.'
если правильно понял вопрост то
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 06.08.2009, 07:59   #3
MAKSA
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 14
По умолчанию

а как потом эти два запроса свести в одну таблицу????
т.е. будет три столбца:
1 - INF
2 - FIO_SOBSNVENIK либо FIO_AGENT (в зависимости от условия)
3 - TEL_SOBSNVENIK либо TEL_AGENT.
MAKSA вне форума Ответить с цитированием
Старый 06.08.2009, 09:08   #4
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

не, обе выборки, как я понял, нужно в одну таблицу запихнуть. Тогда получится что-то типа этого:
Код:
SELECT t_Arenda.INF as Inf, 
           CASE WHEN t_Agent.FIO_AGENT = 'Иванов И. И.' THEN t_Arenda.FIO_SOBSNVENIK ELSE NULL END as FioSobst, 
           CASE WHEN t_Agent.FIO_AGENT = 'Иванов И. И.' THEN t_Arenda.TEL_SOBSNVENIK ELSE NULL END as TelSobst,
           CASE WHEN t_Agent.FIO_AGENT <> 'Иванов И. И.' THEN t_Agent.FIO_AGENT ELSE Null END as FioAgent,
           CASE WHEN t_Agent.FIO_AGENT <> 'Иванов И. И.' THEN t_Agent.TEL_AG ELSE Null END as TelAgent  
FROM AGENT AS t_Agent
INNER JOIN ARENDA_KVARTIR AS t_Arenda
  ON t_Arenda.FIO_AGENT = t_Agent.FIO_AGENT
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 06.08.2009, 10:44   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Код:
select INF , FIO_SOBSNVENIK, TEL_SOBSNVENIK 
from ARENDA_KVARTIR
where FIO_AGENT='Иванов И. И.'
union
select AR.INF , AG.FIO_AGENT, AG.TEL_AG 
from ARENDA_KVARTIR AR 
left join AGENT AG ON AR.FIO_AGENT = AG.FIO_AGENT
where AR.FIO_AGENT<>'Иванов И. И.'
Black Fregat вне форума Ответить с цитированием
Старый 06.08.2009, 11:41   #6
MAKSA
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 14
По умолчанию

Спасибо, пока не побавал, но думаю подойдёт.....)))))))))
Товарищи, есть у кого книжки по составлению сложных запросов? Порылся в сети, в основном всё кгнижки описывают простейшие запросы.
MAKSA вне форума Ответить с цитированием
Старый 06.08.2009, 11:43   #7
MAKSA
Пользователь
 
Регистрация: 06.08.2009
Сообщений: 14
По умолчанию

Код:
left join AGENT AG ON AR.FIO_AGENT = AG.FIO_AGENT
Растолкуйте строчку.......
MAKSA вне форума Ответить с цитированием
Старый 06.08.2009, 11:57   #8
Власов А.С.
Пользователь
 
Регистрация: 04.08.2009
Сообщений: 48
По умолчанию

И у меня вопрос вот листинг кода
procedure TForm2.Button1Click(Sender: TObject);
var k:boolean;
m:string;
begin
ProgressBar1.Position:=0;
for i:=ProgressBar1.Min to ProgressBar1.Max do
begin
ProgressBar1.Position:=ProgressBar1 .Position+1;
Sleep(30);
Label5.Caption:='Идет поиск данных ' +IntToStr(ProgressBar1.Position)+ '%';
Application.ProcessMessages;
end;
ProgressBar1.Position:=0;
Label5.Caption:='';
k:=false;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select *');
ADOQuery1.SQL.Add('FROM Свод');
if CheckBox1.Checked then
begin
if not(k) then ADOQuery1.SQL.Add('where Сельсовет='+chr(39)+DBLookupComboBo x3.Text+chr(39)) else ADOQuery1.SQL.Add(' and Сельсовет='+chr(39)+DBLookupComboBo x3.Text+chr(39)) ;
k:=true;
end;
if CheckBox2.Checked then
begin
if not(k) then ADOQuery1.SQL.Add('where КБК='+chr(39)+DBLookupComboBox4.Tex t+chr(39)) else ADOQuery1.SQL.Add(' and КБК='+chr(39)+DBLookupComboBox4.Tex t+chr(39)) ;
k:=true;
end;
if CheckBox3.Checked then
begin
if not(k) then
begin
if (edit1.text<>'') and (edit2.text<>'') then ADOQuery1.SQL.Add('where Дата>=#'+edit1.Text+'# and Дата<=#'+edit2.Text+'#');
end
else
begin
if (edit1.text<>'') and (edit2.text<>'') then ADOQuery1.SQL.Add('and Дата>=#'+edit1.Text+'# and Дата<=#'+edit2.Text+'#');
end;
k:=true;
end;
ADOQuery1.Active:=false;
ADOQuery1.Active:=true;
end;

и вот
procedure TForm2.Button3Click(Sender: TObject);
var k:boolean;
m:string;
begin
ProgressBar1.Position:=0;
for i:=ProgressBar1.Min to ProgressBar1.Max do
begin
ProgressBar1.Position:=ProgressBar1 .Position+1;
Sleep(30);
Label5.Caption:='Идет подсчет данных ' +IntToStr(ProgressBar1.Position)+ '%';
Application.ProcessMessages;
end;
ProgressBar1.Position:=0;
Label5.Caption:='';

k:=false;
ADOQuery2.Active:=false;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('Select Sum([Свод].[Сумма]) AS [Sum - Сумма]');
ADOQuery2.SQL.Add('FROM Свод');
if CheckBox1.Checked then
begin
if not(k) then ADOQuery2.SQL.Add('where Сельсовет='+chr(39)+DBLookupComboBo x3.Text+chr(39)) else ADOQuery2.SQL.Add(' and Сельсовет='+chr(39)+DBLookupComboBo x3.Text+chr(39)) ;
k:=true;
end;
if CheckBox2.Checked then
begin
if not(k) then ADOQuery2.SQL.Add('where КБК='+chr(39)+DBLookupComboBox4.Tex t+chr(39)) else ADOQuery2.SQL.Add(' and КБК='+chr(39)+DBLookupComboBox4.Tex t+chr(39)) ;
k:=true;
end;
if CheckBox3.Checked then
begin
if not(k) then
begin
if (edit1.text<>'') and (edit2.text<>'') then ADOQuery2.SQL.Add('where Дата>=#'+edit1.Text+'# and Дата<=#'+edit2.Text+'#');
end
else
begin
if (edit1.text<>'') and (edit2.text<>'') then ADOQuery2.SQL.Add('and Дата>=#'+edit1.Text+'# and Дата<=#'+edit2.Text+'#');
end;
k:=true;
end;
ADOQuery2.Active:=false;
ADOQuery2.Active:=true;
end;
а как обеденить в один
Власов А.С. вне форума Ответить с цитированием
Старый 06.08.2009, 17:15   #9
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Цитата:
Сообщение от MAKSA Посмотреть сообщение
Спасибо, пока не побавал, но думаю подойдёт.....)))))))))
Товарищи, есть у кого книжки по составлению сложных запросов? Порылся в сети, в основном всё кгнижки описывают простейшие запросы.
Книга. Запросы разной сложности. Лично мне понравилась.
Evgeniy26 вне форума Ответить с цитированием
Старый 06.08.2009, 17:49   #10
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Цитата:
Сообщение от MAKSA Посмотреть сообщение
Код:
left join AGENT AG ON AR.FIO_AGENT = AG.FIO_AGENT
Растолкуйте строчку.......
Это 2 таблицы сопоставляются по некоторым условиям. В данном случае к таблице ARENDA_KVARTIR стыкуем таблицу AGENT. само условие идет после ON.
LEFT означает, что главная таблица - ARENDA_KVARTIR. Т.е. из нее попадут все записи и к ним относящиеся из правой таблицы (из правой могут не все отобраться).
Так же существуют конструкции RIGHT JOIN и INNER JOIN.
В первой, соответственно, главная таблица - правая. Во втором случае отберутся только те записи, которые полностью удовлетворяют условию и в левой и в правой таблице.
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросам знатокам и просто любителям, нужно составить не сложный sql запрос modz SQL, базы данных 3 14.08.2013 11:20
Помогите составить запрос или перепроектировать БД Neurotechnic БД в Delphi 1 27.07.2009 10:51
Помогите создать SQL запрос Rain9 SQL, базы данных 5 25.11.2008 08:54
Помогите написать SQL запрос Vedrus SQL, базы данных 1 22.07.2008 13:21
Несложный SQL запрос. Помогите, пожалуйста novicer БД в Delphi 2 10.05.2007 16:21