Ja... knivig rubrik! Hade lite svårt att formulera en bra sökfråga på detta ämne så jag kunde inte hitta något som stämde överens med det jag ville (även om det säkerligen finns).
Det jag vill göra är följande:
Jag har 2 tabeller (tabell1 och tabell2) som ser ut som följande:
tabell1
Id Datum RegistreradTid Anställd
tabell2
Id Tabell1Id Område Antal
Det jag vill göra är att summera all "RegistreradTid" i tabell1 där "Anställd" är X och alla "Antal" i tabell2 där "Tabell1Id" matchar de som hittas i frågan som ställs mot "tabell1" SAMT endast innehåller "Område" Y
Det jag har problem med i den JOIN jag har knåpat ihop är att den summerar inte de fälten i tabell1 som inte har några matchar på "Område" = Y... om ni förstår vad jag menar.
Är det JOIN som jag bör jobba med eller bör jag köra med någon/några subquerys? Tips och exempel mottages varmt
Glömde nämna att jag sitter i Access
LarsGMedlem sedan dec. 200012 464 inlägg select sum(registreradtid),
(select sum(antal)
from tabell2
where tabell2.tabell1id = tabell1.id
and tabell2.område = 'Y')
from tabell1
where anställd = 'X'
Tack för svaret LarsG!
Jag har pillat om det en aning och får det inte riktigt att fungera. Summeringen av x.pUnits blir 0. Så här ser min kod ut nu
SELECT SUM(b.pCalculatedTime) as c,SUM(b.pRegisteredTime) as r,
(SELECT SUM(x.pUnits) AS p
FROM BBACEmpPes AS x
WHERE x.pBBACId = b.pId
AND x.pPeNumId IN (SELECT q.pPeNum FROM BBACPeNums AS q
WHERE q.pWorkArea = " & _Area & " AND q.pTimeType = 'A')) AS Units,
COUNT(b.pId) AS ct
FROM BBAC AS b
WHERE b.pCalculatedTime <> 0 AND b.pWorkArea = " & _Area & "
AND b.pTimeType = 'A'
AND b.pEmployee = " & emp.EmployeeId & "
AND b.pYear = " & _Date.Year & "
AND b.pWeek = " & _Date.WeekNum
Har jag knåpat ihop det helt galet? :)
LarsGMedlem sedan dec. 200012 464 inlägg Njae, jag kan inte se något direkt fel. Du får försöka dela upp det i mindre bitar och testa dessa var för sig. T.ex. avd får du för resultat av
select x.pUnits
from BBACEmpPes AS x
where x.pPeNumId in (select q.pPeNum
from BBACPeNums AS q
where q.pWorkArea = " & _Area & "
and q.pTimeType = 'A')
och om du inte får något resultat av den får du testa subselecten i den frågan separat.
Får du noll eller är resultatet null?
Hej igen!
Det blir ett nullvärde.
Jag har testat att dela upp den i bitar och det går bra så det verkar vara
WHERE x.pBBACId = b.pId
som medför att den inte hittar. Jag har dubbelkollat och det finns poster som matchar så jag vet inte varför den inte länkar rätt, några idéer?
LarsGMedlem sedan dec. 200012 464 inlägg Har dom två kolumnerna samma datatyp? Det kan bli något problem om mabn får en implicit konvertering.
Ja de är båda långa heltal
Hmm... kan det vara så att det är för att jag kör en SUM före min subquery som gör att det bråkar månne?
Löste det genom att byta ut
x.pBBACId = b.pId
till
x.pBBACId IN
(SELECT pId FROM BBAC
WHERE pCalculatedTime <> 0
AND pWorkArea = " & _Area & "
AND pTimeType = 'A'
AND pEmployee = " & emp.EmployeeId & "
AND pYear = " & _Date.Year & "
AND pWeek = " & _Date.WeekNum & ")
Känns långt ifrån optimalt att köra en till subquery på det men finns det något annat sät jag kan få fram alla "b.pId" som matchar i "första frågan"?