[MSSQL, SQL]Update over meerdere records

Pagina: 1
Acties:

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Topicstarter
Mensen,

Ik ben bezig met een simpele EKManager, Dit draait natuurlijk om de punten :).. Mijn db design is niet overweldigens, maar door tijdsgebrek was dit het beste. Misschien dat ik daardoor dit probleem heb, maar dat zou ik dan volgend jaar wel anders oplossen.

In de database heb ik drie tabellen (die hiervoor nodig zijn)
- PouleWedstrijden (Alle poulewedstrijden)
- PouleUitslagen (1e/2e/3e/4e)
- Finales (Alles vanaf de kwartfinales)

In de eerste tabel sla ik op wie (userID) welke wedstrijd(wedstrijdid) welke uitslag geeft (homescore/awayscore).. Bij de berekending komt het goede aantal punten in (Punten) te staan. Voor de andere twee tabellen komt het er eigelijk op neer dat die ook punten per userid hebben.

Ik kan dus nu drie verschillende selects maken met een sum erin. en group by userid. Dit kan allemaal en gaat ook goed.

Nu wil ik natuurlijk ook kunnen sorteren op punten. Dus ik denk gooi alles in een temptable en update de hele boel gewoon.. En daar gaat het fout. heb de volgende topics bekeken, maar kwam er niet uit:
[rml][ SQL] Update met subqueries[/rml]
[rml][ SQL] Update query syntax[/rml]

Zelf de volgende code geprobeerd:
ASP:
1
2
3
Update #TempUitlsag Set Punten = TU.Punten + IsNull(sum(VP.punten),0)
FROM #TempUitlsag TU, pouleuitslagen VP 
Where tu.UserID = VP.UserID


Alleen doet ie dit niet vanwege: An aggregate may not appear in the set list of an UPDATE statement.

Nu kan het zo binnen een stored procedure, alleen hoe moet ik het dan oplossen of ben ik al goed opweg met deze update?

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Topicstarter
ASP:
1
2
3
Update #TempUitlsag Set Punten = TU.Punten + (select IsNull(sum(punten),0) from voorspelling_pouleuitslagen x Where x.UserID = TU.UserID)
FROM #TempUitlsag TU, voorspelling_pouleuitslagen VP 
Where tu.UserID = VP.UserID


De tabelnamen kloppen niet met het voorbeeld, maar het werkt wel.. Bedankt allemaal :D

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Of je datamodel goed of slecht is kan ik niet zeggen, want ik snap de bedoeling niet goed.


Als je je punten wilt opslaan, zal je zowiezo een subquery oid moeten gebruiken:
code:
1
2
3
update blaat 
set punten = punten + ( select sum(vp.punten) from ...... )
where ...


En je kan het natuurlijk ook doen door de FROM clause van de UPDATE te gebruiken, zoals je zelf al gemekrt hebt.

[ Voor 18% gewijzigd door whoami op 26-05-2004 19:57 ]

https://fgheysels.github.io/


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Leuk, het is weer tijd voor de EK pools :) Heb er zelf ook eentje in elkaar gedraaid.
Om het datamodel en de code heb ik me niet al te veel zorgen gemaakt, het moest snel af en over een paar weken gaat het toch weer stof vangen ergens in m'n archief ;).

Today's subliminal thought is: