Loading...
sevdalin avatar sevdalin 38 Точки

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 1586 Точки
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 38 Точки

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

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

Четейки тук 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.