Problem 7. Employees with Project - MSSQL Joins - Софтуерен университет

+ Нов въпрос
sevdalin avatar sevdalin 37 Точки

Problem 7. Employees with Project - MSSQL Joins

Здравейте имам следната задача:

Write a query that selects:

  • EmployeeID
  • FirstName
  • ProjectName

Filter only employees with a project which has started after 13.08.2002 and it is still ongoing (no end date). Return the first 5 rows sorted by EmployeeID in ascending order.

Заявката, която ползвам и която според мен дава верен резултат е следната:

SELECT TOP 5 e.EmployeeID, e.FirstName, p.Name AS [ProjectName] FROM Employees AS [e]
JOIN EmployeesProjects AS [ep]
ON e.EmployeeID = ep.EmployeeID
JOIN Projects AS [p]
ON ep.ProjectID = p.ProjectID
AND (FORMAT(p.StartDate, 'dd-MM-yyyy') > '13/08/2002' AND p.EndDate IS NULL)
ORDER BY e.EmployeeID

Обаче, като си пусна решението при --> Професора, той не е на същото мнение и не мога да разбера къде е проблема...

Някой може ли да помонге?

Тагове:
0
Databases Basics
fbinnzhivko avatar fbinnzhivko 1055 Точки
select top 5 e.EmployeeID, e.FirstName, p.Name as ProjectName from Employees as e
join EmployeesProjects as ep
on e.EmployeeID = ep.EmployeeID
join Projects as p
on ep.ProjectID = p.ProjectID
where p.StartDate > '2002-08-13' and p.EndDate is null

order by e.EmployeeID

 

Минава кода но не е форматиран правилно.

 

0
13/09/2017 11:42:22
sevdalin avatar sevdalin 37 Точки

Добре де, защо да не е форматиран правилно? Нали първо форматирам датата по начина, по който искам да я сравня?

(FORMAT(p.StartDate, 'dd-MM-yyyy') > '13/08/2002'
0
ambiorix avatar ambiorix 509 Точки

Четейки тук http://www.sql-server-helper.com/tips/date-formats.aspx забелязах, че никъде не са дадени форматите с малки букви. Смених твоите DD и YYYY с големи и вече работи коректно. Мисля, че ако са с малки ще ги гледа да нямат водещи нули отпред (1 вместо 01), но това е само моя спекулация.

Съветът ми е винаги да ползваш този формат YYYY-MM-DD, който е по подразбиране за SQL server, при заявки и условности. Аз действам с него и никога нямам проблем. Вече за визуализация на колона можеш да го форматираш както искаш.

Твоето оправено:

SELECT TOP 5 e.EmployeeID, e.FirstName, p.Name AS [ProjectName] FROM Employees AS [e]
JOIN EmployeesProjects AS [ep]
ON e.EmployeeID = ep.EmployeeID
JOIN Projects AS [p]
ON ep.ProjectID = p.ProjectID
AND (FORMAT(p.StartDate, 'DD-MM-YYYY') > '13/08/2002' AND p.EndDate IS NULL)
ORDER BY e.EmployeeID

 

Как аз бих го написал:

SELECT TOP(5) e.EmployeeID, e.FirstName, p.Name AS [ProjectName]
FROM Employees AS e
INNER JOIN EmployeesProjects AS ep ON e.EmployeeID = ep.EmployeeID
INNER JOIN Projects as p ON ep.ProjectID = p.ProjectID
WHERE p.StartDate > '2002-08-13' AND p.EndDate IS NULL
ORDER BY e.EmployeeID

1