Mijn vraag
Ik ben een tijdje geleden begonnen met wat basis SQL. Ik heb een proef/test database gedownload en alle benodigde software. Al spelende en online tutorial (W3) voor SQL volgend kwam bii mij iets in mijn hoofd dat ik graag wilde realiseren : 2 tabellen (of 3 zelfs) gejoind, en voor deze een groepering van namen van medewerkers op de eerste letter van de achternaam, met daarbij het aantal per letter, het totale bedrag aan salaris en het totaal aan omzet waar deze medewerkers voor zorgen.
Ik kwam er zelf al niet uit maar na een vraag op stackoverflow kreeg ik een werkende query. Althans, ik krijg een tabel. Maar niet gegroepeerd om de eerste letter van het alfabet:
SELECT A.[1e_Initiaal_Achternaam],
A.[Gem. Salaris],
A.[Salaris],
A.[Count],
(SELECT sum(orderbedrag)
FROM Orders WHERE WerknemerID = A.WerknemerID ) as [Order Waarde],
(SELECT sum(orderbedrag) / round(cast(A.Salaris as Int),0)
FROM Orders WHERE WerknemerID = A.WerknemerID ) as [AVG Salaris]
FROM (
SELECT WerknemerID,
Left(Achternaam, 1) as '1e_Initiaal_Achternaam',
cast(avg(Salaris) as Int) AS 'Gem. Salaris',
round(cast(sum(Salaris) as Int),0) as 'Salaris',
Count(Left(Achternaam, 1)) as 'Count'
FROM [dbo].[Werknemer]
GROUP BY Left(Achternaam, 1), WerknemerID
) AS A
ORDER BY A.[1e_Initiaal_Achternaam];
Ik heb naar de code gekeken om te kijken of ik het snap. Ik vermoed dat hij niet alles van de letter B bij elkaar optelt omdat hij ook nog moet groeperen op WerknemerID. En die is uniek per werknemer.
Als ik die uit de group By haal, werkt mijn query niet: dan krijg ik een foutmelding dat ik werknemerID niet gebruikt heb in een aggregate of een group by clause.
Ik heb er nu tijdje op zitten broeden maar ik kom er niet uit. Ik probeer de query te begrijpen zodat ik deze ook kan wijzigen, maar dat wil nog niet echt.
Kan iemand mij hier wegwijs in maken wellicht?
Ik ben een tijdje geleden begonnen met wat basis SQL. Ik heb een proef/test database gedownload en alle benodigde software. Al spelende en online tutorial (W3) voor SQL volgend kwam bii mij iets in mijn hoofd dat ik graag wilde realiseren : 2 tabellen (of 3 zelfs) gejoind, en voor deze een groepering van namen van medewerkers op de eerste letter van de achternaam, met daarbij het aantal per letter, het totale bedrag aan salaris en het totaal aan omzet waar deze medewerkers voor zorgen.
Ik kwam er zelf al niet uit maar na een vraag op stackoverflow kreeg ik een werkende query. Althans, ik krijg een tabel. Maar niet gegroepeerd om de eerste letter van het alfabet:
SELECT A.[1e_Initiaal_Achternaam],
A.[Gem. Salaris],
A.[Salaris],
A.[Count],
(SELECT sum(orderbedrag)
FROM Orders WHERE WerknemerID = A.WerknemerID ) as [Order Waarde],
(SELECT sum(orderbedrag) / round(cast(A.Salaris as Int),0)
FROM Orders WHERE WerknemerID = A.WerknemerID ) as [AVG Salaris]
FROM (
SELECT WerknemerID,
Left(Achternaam, 1) as '1e_Initiaal_Achternaam',
cast(avg(Salaris) as Int) AS 'Gem. Salaris',
round(cast(sum(Salaris) as Int),0) as 'Salaris',
Count(Left(Achternaam, 1)) as 'Count'
FROM [dbo].[Werknemer]
GROUP BY Left(Achternaam, 1), WerknemerID
) AS A
ORDER BY A.[1e_Initiaal_Achternaam];
Ik heb naar de code gekeken om te kijken of ik het snap. Ik vermoed dat hij niet alles van de letter B bij elkaar optelt omdat hij ook nog moet groeperen op WerknemerID. En die is uniek per werknemer.
Als ik die uit de group By haal, werkt mijn query niet: dan krijg ik een foutmelding dat ik werknemerID niet gebruikt heb in een aggregate of een group by clause.
Ik heb er nu tijdje op zitten broeden maar ik kom er niet uit. Ik probeer de query te begrijpen zodat ik deze ook kan wijzigen, maar dat wil nog niet echt.
Kan iemand mij hier wegwijs in maken wellicht?
/f/image/U1iK8H0Ds0LkLF8DBuTiXnp5.png?f=fotoalbum_large)
[ Voor 14% gewijzigd door DeRooney op 23-11-2023 14:48 . Reden: afbeeldingen toegevoegd. ]