zapytanie w sql na bazie AdventureWorks2008R2

0

hej:)
uczę się dopiero sql.. i mam problem z pewnym zapytaniem.
-->> Wyświetl historię zatrudnienia pracowników (Person.Person.FirstName, Person.Person.LastName, HumanResources.DepartmentName, ), których zatrudniano co najmniej dwukrotnie

w jaki sposób zapisać ten warunek , że ktoś został zatrudniony dwukrotnie?? Jakieś podpowiedzi? bądź rozwiązanie?

0

a jak masz zapisane, że ktoś został zatrudniony?
BTW HAVING + GROUP BY

0

to jest cały tekst jaki mam do zapytania : ) zapewne chodzi, ze np dwa razy ma date umowy rozpoczecia pracy? np. jak została mu przedłużona?

1

Nie mam teraz dostępu do AdventureWorks, wrócę do domu to sprawdzę. Bazuje na razie na tym https://sistemas.uniandes.edu.co/~isis3301/dokuwiki/lib/exe/fetch.php?media=enlaces:adventureworks.pdf schemacie.

Bierzesz wszystkich z tabeli HumanResources.Employee razem z informacjami o nich (Person.Person, HumanResources.EmployeeDepartmentHistory, HumanResources.Department). Następnie wyświetlasz tylko tych, którzy pojawią się dwa razy. Można sprytniej, ale wydaje mi się, że to podejście będzie łatwiejsze do zrozumienia.

1
select user_id from historia_zatrudnienia having count(*) > 1 group by user_id

to Ci zwróci ID wszystkich zatrudnionych przynajmniej dwa razy. Trzeba to połączyć z tabelą user żeby pobrać dane zatrudnionych i z tabelą historia_zatrudnienia żeby pobrać kiedy był zatrudniony

0

select p.FirstName, p.LastName, hd.Name, count(heh.StartDate)
from Person.Person p join HumanResources.Department hd on p.BusinessEntityID=hd.DepartmentID
join HumanResources.EmployeeDepartmentHistory heh on hd.DepartmentID=heh.DepartmentID
where COUNT(heh.StartDate) > 2;

co jest nie tak?;////

0

porównaj sobie moje i Twoje zapytanie

0

z tego co wiem to GROUP BY stosuje się przed HAVING.
robiąc na tej bazie i tak mi nie działa to co napisałeś ;p mimo zmian : )

SELECT p.FirstName, p.LastName, hd.Name, count(heh.StartDate)
FROM Person.Person p join HumanResources.Department hd on p.BusinessEntityID=hd.DepartmentID
join HumanResources.EmployeeDepartmentHistory heh on hd.DepartmentID=heh.DepartmentID
GROUP BY p.FirstName
HAVING COUNT(*) >1;

0

Na pewno grupowanie po FirstName jest błędem. Rób to po unikalnym id pracownika i usuń ten count(heh.StartDate).

0
 select p.FirstName, p.LastName, hd.Name
from Person.Person p join HumanResources.Department hd on p.BusinessEntityID=hd.DepartmentID
		join HumanResources.EmployeeDepartmentHistory heh on hd.DepartmentID=heh.DepartmentID
group by p.BusinessEntityID
having count(*) >1;  

????

1

Zatem jeśli uczysz się SQL, zacznij od dobrego opanowania podstaw. Przykładowo tutaj http://www.sqlpedia.pl/kurs-sql/ jest bardzo fajny kurs, przerób 3 pierwsze rozdziały ze zrozumieniem i bez problemu napiszesz wtedy to zapytanie. Dodatkowo autor również operuje na AdventureWorks. Rozpoczęcie nauki od skomplikowanych przykładów nie jest dobrym pomysłem.

0

Witajcież
zapytam czy Kto miał problem z opisem na stronie 779 książki Jacek Matulewski Helion 2011
dotyczącym instalacji bazy danych AdventureWorks

MS SQL 2008 bowiem ja nie dałem rady tego pobrać z sieci...

może Kto z Kolegów / Koleżanek ma link do tej opisywanej tamże w książce bo zwyczajnie chciałbym sobie to przerobić...

skoro autor doktor Jacek Matulewski mi to z kolegami prace magisterskie opisał był...

pozdrofka dla Wszystkich - dzięki za ewentualną podpowiedź !

1 użytkowników online, w tym zalogowanych: 0, gości: 1