Войти

Показать полную графическую версию : запрос SQL


virus8
09-05-2013, 21:29
Добрый день форумчане с праздничком Вас!!!
Помогите пожалуйста с одной вещью есть sql запрос к базе данных AdwentureWorks2008 поднятой на SQLServer 2008

BEGIN TRY
select
t1.FirstName,t1.LastName,t4.Name as divisionTitle,t2.JobTitle,t3.StartDate,t3.EndDate
from
person.person t1, HumanResources.Employee t2, HumanResources.EmployeeDepartmentHistory t3, HumanResources.Department t4

where
t1.BusinessEntityID = t2.BusinessEntityID and t2.BusinessEntityID = t3.BusinessEntityID and t3.DepartmentID = t4.DepartmentID
and t3.StartDate <= '01.01.2004'

END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber; END CATCH;

он выдает данные
http://s018.radikal.ru/i526/1305/0e/bbb6377f04b3.jpg (http://www.radikal.ru)

Вопрос заключается вот в чем
При выборе даты нужно указывать где этот человек работал или работает. К примеру:
если мы устанавливаем дату 01.01.2004 то получаем строку
Rob Walters Engineering Senior Tool Designer 05.01.2002 30.06.2004

а если выбираем 01.10.2005 то получаем
Rob Walters Tool Design Senior Tool Designer 01.07.2004

Мне не надо писать код, объяснять основы SQL запросов - я тупо не могу въехать в логику того как это делается!!!!!

P.S. Я конечно понимаю праздник и я со своими глупыми вопросами тут, но все таки у меня уже мозги кипят))) Еще раз всех с праздником :yahoo:

lxa85
09-05-2013, 23:34
virus8, ну а чего тебе не понятно?
Смотри, у тебя идет выборка SELECT поля, откуда, которые(!) WHERE t3.StartDate <= '01.01.2004'
Соотв. от этого поля и идет просмотр. В первом случае
Rob Walters Engineering Senior Tool Designer 05.01.2002(<=01.01.2004) 30.06.2004, во втором
Rob Walters Tool Design Senior Tool Designer 01.07.2004 (<=01.10.2005)
Поле t3.EndDate очевидно NULL и по этому не печатается. Т.е. при желании его надо выводить явно.
Собственно говоря наличие данных в других полях нам безразлично, главное чтобы индексы совпадали и StartDate соответствовал условию.
Все нормально, я не вижу причин для беспокойства :)

virus8
09-05-2013, 23:52
Вот вроде что то навоял))

BEGIN TRY
select
t1.FirstName,t1.LastName,t4.Name as divisionTitle,t2.JobTitle,t3.StartDate,t3.EndDate
from
person.person t1, HumanResources.Employee t2, HumanResources.EmployeeDepartmentHistory t3, HumanResources.Department t4

where
t1.BusinessEntityID = t2.BusinessEntityID and t2.BusinessEntityID = t3.BusinessEntityID and t3.DepartmentID = t4.DepartmentID
and (t3.EndDate > " + SaveText.Date +
" or t3.EndDate is null) and (t3.StartDate < " + SaveText.Date + " or t3.StartDate = " + SaveText.Date + ")"


END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber; END CATCH;



где SaveText.Date нужное мне число - вроде нормально отрабатывает)))
А так спасибо - твой ответ кое-что прояснил!

Busla
15-05-2013, 16:35
Даты лучше писать в формате ISO 8601




© OSzone.net 2001-2012