webForumDet fria alternativet

summa från två tabeller

11 svar · 499 visningar · startad av daniel_ra

daniel_raMedlem sedan jan. 2002381 inlägg
#1

Halloj

Jag undrar hur jag gör följande:

jag har två tabeller som innehåller personID samt en summa. Det kan finnas fler rade för varje personID i respektive tabell.

tabell1
personID, Summa1

tabell2
personID, Summa2

Att räkna fram summan grupperat per person är inte så svårt per tabell men hur gör jag om jag vill ha summan för tabell1+summan för tabell2 grupperat per person.

hoppas att ni förstår vad jag menar.

daniel_raMedlem sedan jan. 2002381 inlägg
#2

Förtydligande:

jag är egentligen inte intresserad av summan i tabellen utan summan av antalet rader/poster i respektive tabell grupperat per person

skulle det se ut såhär:

tabell1
personID,summa1
1, 10
1, 15
2,4

tabell2
personID,summa2
1,10
2.5
3,20

vill jag få följande resultat:

personID1 summa :3
personID2 summa :2
personID3 summa :1

LarsGMedlem sedan dec. 200012 464 inlägg
#3
select personID,count(*)
  from
  (select personID
      from tabell1
   union all
   select personID
      from tabell2) dt
  group by personID
daniel_raMedlem sedan jan. 2002381 inlägg
#4

Det är ju fantastiskt, funkar klockrent. Kan någon förklara vad det är den egentligen gör. vad gör union och vad står dt för?

det är lättare i framtiden om man behöver använda detta att veta..
tack för hjälpen!!

CompusaMedlem sedan jan. 20023 327 inlägg
daniel_raMedlem sedan jan. 2002381 inlägg
#6

vill utveckla denna fråga vidare. Jag har tidigare använt följande:

SUM(CASE WHEN tablell1.värde like 'AA%' then 1 else 0 end) + SUM(CASE WHEN tablell1.värde like '%BB%' then 1 else 0 end) as Totalt för att plocka ut en totalsumma från en tabell. Nu vill jag göra följande

jag vill presis som ovan räkna fram en totalsumma men jag vill även ha en summa där alla träffar från tabell2 får en poäng, träffar från tabell1 där värde ett börjar med AA skall få en poäng och träffar från tabell1 där värde två börjar med BB skall få två poäng.

går detta att lösa med utgångspunkt från frågan ovan?

LarsGMedlem sedan dec. 200012 464 inlägg
#7
select personID,
       count(*), 
       sum(case when origin = 1 and personid like 'AA%' then 1
                when origin = 2 and personid like 'BB%' then 2
                when origin = 2 then 1 end)
  from
  (select personID, 1 as origin
      from tabell1
   union all
   select personID, 2
      from tabell2) dt
  group by personID
daniel_raMedlem sedan jan. 2002381 inlägg
#8

får följande felmeddelande

Syntax error converting the varchar value 'AA Daniel' to a column of data type int.

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Vilken kolumn är det då som kan innehålla AA/BB?

daniel_raMedlem sedan jan. 2002381 inlägg
#10

det fältet i tabell1 som innehåller detta värde är namn, jag har lagt till detta i frågan. det som kan nämnas är att fältet namn inte finns i tabell2 utan endast i tabell1. då jag endast lade till namn i den första selectsatsen så klagade den på att det måste vara lika många fält i de båda frågorna. jag lade därför till ett annat fält från tabell2 istället för att antalet skulle vara lika

daniel_raMedlem sedan jan. 2002381 inlägg
#11

Vet nu varför den klagade på detta. Då jag lade till ett det sista fältet från tabell2 i frågan så råkade jag välja ett fält som var ett tal-fält istället för en sträng. Då jag bytte till ett annat fält som inte var ett tal-fält så gick det bra. Tack för hjälpen!!

hallinmMedlem sedan nov. 20062 inlägg
#12

lånar det här exemplet lite om det är ok. om man skulle haft tex 100 poster i personID och Summa1 hur skulle man skriva för att få ut tex de 5 med flest rader och inte skriva ut alla 100 personID och Summa

MVH/Hallin

daniel_ra skrev:

Förtydligande:

jag är egentligen inte intresserad av summan i tabellen utan summan av antalet rader/poster i respektive tabell grupperat per person

skulle det se ut såhär:

tabell1
personID,summa1
1, 10
1, 15
2,4

tabell2
personID,summa2
1,10
2.5
3,20

vill jag få följande resultat:

personID1 summa :3
personID2 summa :2
personID3 summa :1

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