webForumDet fria alternativet

Join, Summa tabell 1 och tabell 2

9 svar · 1 753 visningar · startad av Webslave

WebslaveMedlem sedan maj 2002647 inlägg
#1

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

WebslaveMedlem sedan maj 2002647 inlägg
#2

Glömde nämna att jag sitter i Access

LarsGMedlem sedan dec. 200012 464 inlägg
#3
select sum(registreradtid),
       (select sum(antal)
          from tabell2 
         where tabell2.tabell1id = tabell1.id
           and tabell2.område = 'Y')
  from tabell1
 where anställd = 'X'
WebslaveMedlem sedan maj 2002647 inlägg
#4

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
#5

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?

WebslaveMedlem sedan maj 2002647 inlägg
#6

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
#7

Har dom två kolumnerna samma datatyp? Det kan bli något problem om mabn får en implicit konvertering.

WebslaveMedlem sedan maj 2002647 inlägg
#8

Ja de är båda långa heltal

WebslaveMedlem sedan maj 2002647 inlägg
#9

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?

WebslaveMedlem sedan maj 2002647 inlägg
#10

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"?

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)