Zadania bazy danych

0

Witam.
Mam problem z napisaniem zadania z baz danych.
4. Utwórz widok PLACE_POD, który wyświetla nazwiska i pensje najlepiej zarabiających pracowników
w każdym oddziale.
ID_Oddz Nazwisko Placa_pod


10 SUMINSKI 8130,00
40 BARTCZAK 4350,00
30 MALINOWSKI 4070,00
20 BRZEZINSKI 4960,00

Napisałem skrypt wyświetlający place_pod z każdego oddziału ale nie mogę sobie poradzić z wypisaniem jeszcze nazwiska do tego.

SELECT ID_Oddz, MAX(Placa_pod) AS Placa_max
FROM Zatrudnieni GROUP BY ID_Oddz
GO 

Potrafi ktoś mi pomóc?

0

Jeżeli nazwisko jest w tej samej tabeli to:

SELECT ID_Oddz, Nazwisko, MAX(Placa_pod) AS Placa_max
FROM Zatrudnieni GROUP BY ID_Oddz, Nazwisko

jeżeli nie jest to albo zgadniemy albo nam napiszesz.
Editnąłem.

0

Jest w tej samej tabeli. Próbowałem już tak zrobić lecz wyświetla błąd:
Msg 8120, Level 16, State 1, Line 1
Column 'Zatrudnieni.Nazwisko' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

0

Teraz wyświetla wszystkich pracowników a powinno wyświetlić tylko najlepiej zarabiających w danym oddziale. Wybaczcie za post pod postem.

0

Jeżeli nazwisko dodasz do selecta to grupowanie nie zadziała prawidłowo bo będzie grupował także po nazwisku

1

Jeśli chcesz 1 najlepiej zarabiającego z każdego działu to poniższe powinno pomóc

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW vVV.v_PLACE_POD
AS
 select s.id_oddz, s.nazwisko, s.placa_pod from 
(select p.id_oddz, p.nazwisko, p.placa_pod, RANK() over (PARTITION by p.id_oddz order by p.placa_pod desc) rnk      
  from vVV.placa p) s
 where s.rnk = 1
GO
0

Dzięki wielkie woolfik. Po lekkich modyfikacjach działa:)

1

To też powinno zadziałać.

SELECT t1.*
FROM place t1 INNER JOIN
(SELECT ID_Oddz, MAX(Placa_pod) AS max_placa
FROM place GROUP BY ID_Oddz) t2
ON t1.ID_Oddz = t2.ID_Oddz and t1.Placa_pod = t2.max_placa
0

@szweszwe również działa. Dzięki wielkie

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