Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите склеить две таблицы 
V
    Опции темы
MadCoder
Дата 12.5.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте!

Есть две таблицы. В одной у нас номера договоров (contr_id), во второй - эти договоры и события их выполнений (даты). Нужно сгенерировать таблицу, в которой отображаются все договоры из первой таблицы, а второе поле - последнее событие для этого договора из второй таблицы.
Получилось следующее:
Код

SELECT contr.contr_id, results.res_date from tblContrApplies as contr
left join tblresultsstory as results on contr.contr_id=results.contr_id 
order by (results.res_date);


Все хорошо, только отображает все даты для договоров, а не самый максимальный. Ума не приложу, куда MAX() вставить...

tblContrApplies - здесь лежат номера договоров.
tblresultsstory - здесь лежат события (номера и даты).

Использовать tblContrApplies обязательно, т.к. я оттуда выборку делаю...

База данных MS SQL.

Это сообщение отредактировал(а) MadCoder - 12.5.2008, 09:45
PM WWW ICQ   Вверх
Akina
Дата 12.5.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Код

SELECT contr.contr_id, max(results.res_date)  as max_date
from tblContrApplies as contr
left join tblresultsstory as results 
  on contr.contr_id=results.contr_id 
group by contr.contr_id;
?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
MadCoder
Дата 12.5.2008, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Офигенно! А как сделать теперь сортировку не по номеру, а по дате results.res_date, начиная с самой ранней, а все нуллы поместить в начало?
PM WWW ICQ   Вверх
ТоляМБА
Дата 12.5.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

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



Код
Order by 2
В конец запроса
PM   Вверх
MadCoder
Дата 12.5.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо громадное всем, все работает!

Добавлено через 7 минут и 10 секунд
Прошу прощения, но не хочет он с ORDER BY работать в функциях:
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER FUNCTION [dbo].[getOperatorContractList]
(
    @empl_id int
)
RETURNS TABLE 
AS
RETURN 
(
SELECT contr.contr_id, max(results.res_date)  as max_date 
from tblContrApplies as contr
left join tblresultsstory as results 
  on contr.contr_id=results.contr_id 
where contr.empl_id=@empl_id
group by contr.contr_id
Order by 2;
)


Пишет, что:
Msg 1033, Level 15, State 1, Procedure getOperatorContractList, Line 21
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.


PM WWW ICQ   Вверх
MadCoder
Дата 13.5.2008, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Разобрался, спасибо smile.
PM WWW ICQ   Вверх
TaNK
Дата 13.5.2008, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MadCoder @ 12.5.2008,  10:39)
Спасибо громадное всем, все работает!

Добавлено @ 10:46
Прошу прощения, но не хочет он с ORDER BY работать в функциях:
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER FUNCTION [dbo].[getOperatorContractList]
(
    @empl_id int
)
RETURNS TABLE 
AS
RETURN 
(
SELECT contr.contr_id, max(results.res_date)  as max_date 
from tblContrApplies as contr
left join tblresultsstory as results 
  on contr.contr_id=results.contr_id 
where contr.empl_id=@empl_id
group by contr.contr_id
Order by 2;
)


Пишет, что:
Msg 1033, Level 15, State 1, Procedure getOperatorContractList, Line 21
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

написано что order не поддерживается в функциях, просмотрах.....и так далее


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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