Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

tandaleyo avatar tandaleyo 13 Точки

Проблем с домашно SQL Introduction

Привет,

Затрудних се на последния въпрос: Problem 24.       Write a SQL query to find the names of all employees from the departments "Sales" and "Finance" whose hire year is between 1995 and 2005.

Написал съм следното query:

USE SoftUni
SELECT e.FirstName, e.LastName, e.HireDate, d.Name FROM Employees e 
JOIN Departments d
ON e.DepartmentID = d.DepartmentID WHERE d.Name = 'Finance' OR d.Name = 'Sales' AND e.HireDate > 1995 AND e.HireDate < 2005

Проблема е, че това query "вади" резултати или само за отдел Sales или само за отдел Finance, като генерира резултатите за този отдел, който напиша първи в кода - в случая само за Finance.

Не мога да разбера от къде идва проблема, въртях query-то по 1000 различни начини и все - куф...

Моля за помощ

 

Тагове:
0
Databases Basics
tandaleyo:
Problem solved.
dimityr.jechev avatar dimityr.jechev 198 Точки
Best Answer

SELECT e.FirstName, e.LastName, d.Name as DeptName,e.HireDate
FROM Employees e
  INNER JOIN Departments d
  ON (e.DepartmentId = d.DepartmentId
  AND e.HireDate > '1/1/1995' 
  AND e.HireDate < '12/31/2005'
  AND d.Name IN ('Sales', 'Finance'))
Това е мойто решение и си работи коректно ,май :D

1
30/06/2015 18:18:04
Kamigawa avatar Kamigawa 750 Точки

Предполагам проблема идва от WHERE - сложи няколко скоби за да групираш булевите проверки и трябва да тръгне.

Примерно (Finance OR Sales) AND (>1995 AND <2005)

Може с IN и/или BETWEEN примерно: IN(Finance, Sales) AND BETWEEN 1995 AND 2005

2
30/06/2015 18:04:41
crazy7 avatar crazy7 177 Точки

Само да допълня че ако искаш да сравняваш годините по този начин, трябва да изкараш само годината от "e.HireDate", а именно : YEAR(e.HireDate)

1
pachuchi avatar pachuchi 14 Точки

/*DepartmentID for "Sales" = 3
  DepartmentID for "Finance" = 10*/

--Query 1 - Non -including years query
SELECT        e.FirstName + ' ' + e.LastName as [Employee]--, e.DepartmentID, e.HireDate -- 4 Double check
FROM        Employees e
WHERE        e.DepartmentID IN (3, 10) AND
            HireDate BETWEEN '1996-1-1' AND '2004-12-31'
ORDER BY    Employee ASC

--Query 2 - Including years query
/*
SELECT        e.FirstName + ' ' + e.LastName as [Employee]--, e.DepartmentID, e.HireDate
FROM        Employees e
WHERE        e.DepartmentID IN (3, 10) AND
            HireDate BETWEEN '1995-1-1' AND '2005-12-31'


Ако наистина искаш да разкрасиш нещата можеш да направиш вложен SELECT за 3 и 10 във IN конструкцията. ;)

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