Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   запрос SQL (http://forum.oszone.net/showthread.php?t=260264)

virus8 09-05-2013 21:29 2147329

запрос SQL
 
Добрый день форумчане с праздничком Вас!!!
Помогите пожалуйста с одной вещью есть 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;

он выдает данные


Вопрос заключается вот в чем
При выборе даты нужно указывать где этот человек работал или работает. К примеру:
если мы устанавливаем дату 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 2147413

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 2147418

Вот вроде что то навоял))
Код:

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 2150500

Даты лучше писать в формате ISO 8601


Время: 14:58.

Время: 14:58.
© OSzone.net 2001-