webForumDet fria alternativet

Summera tabell med spelarresultat

31 svar · 1 206 visningar · startad av budg1e · sida 2 av 2

budg1eMedlem sedan apr. 2005116 inlägg
#21

Tackar & bugar, nu fungerar summeringen klockrent! Måste man ställa ytterligare en SQL-fråga för att lista spelarnas individuella resultat. Ju nu ser jag bara summeringen av de 13 lagen.

Går det också att sortera lagen efter bästa resultat?

Bästa laget efter summeringen är ju det med lägst värde i score2, om lika där så avgör snabbast tid i time2, lika även där så avgör lägst värde i score1, lika även där så avgör snabbast tid i time1.

BrimbaMedlem sedan dec. 19995 875 inlägg
#22

fråga 2 listar väl de tre bästa spelarna från respektive lag?

budg1eMedlem sedan apr. 2005116 inlägg
#23

Jag får aldrig fram något fält med T_Pos. Den visar bara fråga1 med summeringen av lagen...

budg1eMedlem sedan apr. 2005116 inlägg
#24

se bifoga bild hur resultatet blir

lagen.jpg
BrimbaMedlem sedan dec. 19995 875 inlägg
#25

Vad får du för felmeddelande?

select 
	* 
from 
	(select rank() over (partition by lagid order by score1, time1, t_pos) as 'rank', lagid, namn, score1, time1, score2, time2, t_pos from resultat where score2 is not null and time2 is not null) t 
where 
	[rank] < 4
order by 
	lagid, score1, time1, t_pos
budg1eMedlem sedan apr. 2005116 inlägg
#26

Vet inte om det har med fätnamnen att göra. I dina första förslag hade du kallat fältet ID i tabellen laginfo för LagID. Det heter bara ID... Däremot så heter det LagID i tabellen resultat.

budg1eMedlem sedan apr. 2005116 inlägg
#27

inga felmeddelande, nu listas spelarnas resultat, kan man få både summeringen och resultaten samtidigt?

BrimbaMedlem sedan dec. 19995 875 inlägg
#28

Hur vill du att det skall listas? i summeringen finns ju ingen kolumn för namnet på spelaren, men det finns på tabellen.

budg1eMedlem sedan apr. 2005116 inlägg
#29

Redigerat
-----------------
Allt fungerar bra, det enda är sorteringen av laglistan.
Om det går ska den sortera på score2 ASC, time2 ASC först därefter score1 ASC, time1 ASC
----------------

Helst vill jag presentera följande utseende
--------------------------------------------
Lag 1 || Lagnamn || 0 || 39,7 || 2 || 31,8
Lagledare

#1 spelare1 || 0 || 14,7 || 0 || 10,1
#2 spelare2 || 0 || 12,6 || 0 || 10,9
#3 spelare3 || 0 || 12,4 || 2 || 10,8
#4 spelare4 || 3 || 10,7
-------------------------------------------
Lag 2 || Lagnamn || 0 || 39,7 || 2 || 31,8
Lagledare

#5 spelare1 || 0 || 14,7 || 0 || 10,1
#6 spelare2 || 0 || 12,6 || 0 || 10,9
#7 spelare3 || 0 || 12,4 || 2 || 10,8
#8 spelare4 || 3 || 10,7
-------------------------------------------

där Lag 1 = laginfo.id
där lagnamn = laginfo.LagNamn
där lagledare = laginfo.Lagledare

där #1 = resultat.T_pos
där spelare1 = resultat.namn
där 0 = resultat.score1
där 14,7 = resultat.time1
där 0 = resultat.score2
där 10,1 = resultat.time2

laginfo.id = resultat.lagID

BrimbaMedlem sedan dec. 19995 875 inlägg
#30

Fast med sql-server så hämtar man normalt bara data. Presentationen görs i programmet sedan. Programmet kan ju variera, det kan vara en webbsida, en applikation eller kanske bara en xml-fil.

Även om det skulle vara möjligt att presentera datat så som du önskar så vill man inte det. Detta eftersom datatyper blandas och vissa kolumner kommer på vissa rader behöva vara null eller tom bara för att kunna presentera det på rätt sätt.

budg1eMedlem sedan apr. 2005116 inlägg
#31

Du har helt rätt, jag fattade aldrig att det var två olika frågor i ditt svar. Jag är jättetacksam för din hjälp, allt fungerar som det ska nu, sorteringen av laglistan fungerar också.

budg1eMedlem sedan apr. 2005116 inlägg
#32

Behöver ytterligare en justering...

Nu summerar den alla omgångar men jag vill att den ska summera endast en omgång.

Fält för att para ihop omgångarna:

laginfo.CompID = resultat.KatID

Fält för att para ihop lagen

laginfo.id = resultat.lag

Tabell: laginfo

id || CompID || LagNamn || LagLedare

Tabell: resultat

KatID || score1 || score2 || time1 || time2 || lag ||

Har provat flera alternativ men ej lyckas, någos som vet hur jag ska göra?
Är det INNER JOIN som behöver justeras?

SELECT resultat.lag, LagNamn, 
SUM(CASE WHEN rank1 BETWEEN 1 AND 3 THEN score1 ELSE 0 END) AS score1, 
SUM(CASE WHEN rank1 BETWEEN 1 AND 3 THEN time1 ELSE 0 END) AS time1, 
SUM(CASE WHEN rank2 BETWEEN 1 AND 3 THEN score2 ELSE 0 END) AS score2, 
SUM(CASE WHEN rank2 BETWEEN 1 AND 3 THEN time2 ELSE 0 END) AS time2

FROM (SELECT *, rank() OVER (partition BY lag

ORDER BY score1, time1) AS 'rank1', rank() OVER (partition BY lag

ORDER BY score2, time2) AS 'rank2'

FROM resultat) AS resultat 
INNER JOIN laginfo ON resultat.lag = laginfo.id
WHERE rank1 < 4 OR rank2 < 4

GROUP BY resultat.lag, laginfo.LagNamn

ORDER BY score1, score2, time2

Nästa fråga som listar spelarna ser ut såhär

SELECT * FROM 
(SELECT rank() OVER (partition BY lag
ORDER BY score1, time1, score2, time2) AS 'rank', 
lag, namn, score1, time1, score2, time2, T_pos

FROM         resultat

WHERE Klass = 2) t
WHERE [rank] < 5
ORDER BY t_pos
127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)