Om man har en tabell med ett fält Omgang, och låt säga att vi har 8 poster på omg 6 som är den sista. När det gäller sorteringen då du har group och order by måste du nog ha med ALLA fält som du väljer i select-satsen. Skall du sortera på ett summerat fält kan du sätta ett alias på det och lägga med det i order by satsen. Vad är det för problem med ditt exempel? Antar att det inte gör det du har tänkt dej, men jag förstår inte riktigt vad du vill åstadkomma istället... Har ett formulär där jag vill visa dom senast resultaten från helgens match/matcher. alltså baserat på sista omg. I detta fallet är det omg. 6 men efter nästa helg omg.7 och jag vill att det sker med automatik, inte med en dropdownlist. Vet inte om jag fattat rätt nu, men du skulle kunna göra en subquery som hämtar högsta omg. Hej Johan, Kan man inte på något sätt använda sig av TOP x Omgang? För att kunna få ut antalet sista omgångar om man vill få ut en trend? Har för mig att man kan göra såhär: Tack för ditt snabba svar, du är en klippa Om man Skriver SELECT Omgang,* Där har vi det jag frågade om ifrån början. Alltså sista omgången. Löste det med att skapa en tabell till Omg och sen en RIGHT OUTER JOIN på Resultat. Sorry, missade DISTINCT... Såhär skulle det vara... Ja nu fungerar det. Då slipper jag använda en tabell omg. Men vilket är mest databasmässigt effektivast?Sortering
Hur sorterar jag ut alla resultat den sista omgången? Har provat med MAX(Resultat.Omgang) och nu senast Sista(Resultat.Omgang) Här är syntaxen:
<Code> SELECT medlemmar.Namn, Last(Resultat.Omgang) AS SistaförOmgang, Resultat.Resultat, Resultat.Serier, Resultat.Poang
FROM medlemmar INNER JOIN Resultat ON medlemmar.ID = Resultat.Spelare
GROUP BY medlemmar.Namn, Resultat.Resultat, Resultat.Serier, Resultat.Poang
ORDER BY Last(Resultat.Omgang) DESC;</code>Sv: Sortering
Sv: Sortering
/JohanSv: Sortering
GertSv: Sortering
...WHERE omg = (SELECT MAX(omg) FROM tabell)
/JohanSv: Sortering
Så här ser min SELECT ut nu, och det blir ingen skillnad:
Namn Snitt Antal serier Hemmasnitt Serier hemma Bortasnitt Serier borta Poängsnitt Bästa Sämsta
Gert 201,2 8 193,5 8 175,9 0 1 850 760
Linge 187,6 8 189,3 8 203,9 0 1 758 743
Om man spelat Omg 6 hemma och det i resultattabellen står
Nr Spelare Omgang Resultat H_B Serier Poang
159 2 6 850 H 4 4
160 2 6 760 H 4 4
161 5 6 743 H 4 4
162 5 6 758 H 4 4
Så ska det ju inte kunna bli något resultat på BortaSnitt och hemmasnitt borde bli samma som Snitt.
<code>
string SqlCmd = "SELECT m.Namn,";
SqlCmd+="Round(avg(IIF(resultat is null,0,resultat)/IIF(serier is null,1,serier)),1) as Snitt,";
SqlCmd+="SUM(r.Serier) AS [Antal serier],";
SqlCmd+="(SELECT ROUND(AVG(resultat / serier),1) FROM resultat WHERE Spelare = ID AND H_B = 'H') AS Hemmasnitt,";
SqlCmd+="SUM(iif(H_B='H',r.serier,0)) as [Serier hemma],";
SqlCmd+="(SELECT ROUND(AVG(resultat / serier),1) FROM resultat WHERE Spelare = ID AND H_B = 'B') AS Bortasnitt,";
SqlCmd+="SUM(iif(H_B='B',r.serier,0)) as [Serier borta],";
SqlCmd+="ROUND(SUM(r.poang)/SUM(r.serier),2) as Poängsnitt, MAX(r.resultat) AS Bästa,";
SqlCmd+="MIN(IIF(serier = 4,r.resultat,null)) as Sämsta FROM Medlemmar AS m INNER JOIN Resultat AS r ON m.Id = r.Spelare WHERE r.Omgang = (SELECT MAX(Omgang) FROM Resultat) GROUP BY m.Namn,id ORDER BY 8 DESC,2 DESC";
</code>Sv: Sortering
Har provat med TOP 3 Omgang, m.Namn Men Omgang ligger ju inte i medlemmar utan i Resultat
Använder jag TOP 3 i WHERE <code>WHERE r.Omgang = (SELECT TOP 3 Omgang FROM Resultat ORDER BY Omgang) GROUP BY m.Namn,id ORDER BY 2 DESC ,5 DESC"</code>satsen som du skrev förut så kan jag bara få ut TOP 1 alltså
Error:Det går inte att returnera mer än en post från denna underfråga.
Tacksam för all hjälp
GertSv: Sortering
WHERE r.Omgang IN(SELECT TOP 3 Omgang FROM Resultat ORDER BY Omgang) GROUP BY m.Namn,id ORDER BY 2 DESC ,5 DESC
/JohanSv: Sortering
Jag fick ut datagriden men måste kollräkna lite. För det såg skumt ut med bara 4 serier. När vi borde spelat 12 kanske 16 serier.
Namn Snitt Antal serier Hemmasnitt Hemma Bortasnitt Borta Poängsnitt Bästa Sämsta
PW 194,5 4 197,2 4 189 0 1 778 778
Tomas 193 4 186,7 4 192,4 0 1 772 772
osv.
GertSv: Sortering
<Code>
SELECT TOP 3 Omgang,*
FROM Resultat ORDER BY Omgang DESC
</Code>
Får man ut följande resultat
<Code>
Omgang Nr Spelare Omgang Resultat H_B Serier Poang Lag
----------- ----------- ----------- ----------- ----------- ----- ----------- ----------- -----
6 163 8 6 727 H 4 4 A
6 164 8 6 789 H 4 3 A
6 165 14 6 704 H 4 3 A
</code>
Men vad jag vill egentligen få ut ur min db är 43 rader som har omg 6, 5 och 4 Alltså TOP 3 Sv: Sortering
FROM Resultat WHERE Omgang IN(SELECT TOP 3 Omgang FROM Resultat ORDER BY Omgang DESC) ORDER BY Omgang DESC
/JohanSv: Sortering
Om man tar SELECT TOP 3 så är det dom tre sista posterna i db vad jag kan förstå. Inte dom tre högsta värdena i fältet omgången. Så jag kan inte förstå hur detta kan ta ut 16 poster. dvs dom 16 poster med omgång 6 som är den senaste.
Testade ovan kod och det spelar ingen roll om jag byter ut TOP 3 till TOP1 el. 4 det blir samma resultat.
Klurigt det här!
GertSv: Sortering
<code>SELECT dbo.Omg.Nr AS OmgNr, dbo.Resultat.*
FROM dbo.Omg RIGHT OUTER JOIN
dbo.Resultat ON dbo.Omg.Nr = dbo.Resultat.Omgang
WHERE (dbo.Omg.Nr IN
(SELECT TOP 3 Nr
FROM Omg
ORDER BY Nr DESC))</code>
Tack Johan för din hjälp.
En liten följdfråga:
Varför står det inget i böcker typ "Access 2003" eller "SQL Server 2000", "DBO.NET" hur man löser dessa typer av problem. I dom böcker man läst står det bara SELECT * FROM Db Aldrig några mer avancerade urvalsfrågor.
Ha en bra dag!Sv: Sortering
SELECT Omgang,*
FROM Resultat WHERE Omgang IN(SELECT DISTINCT TOP 3 Omgang FROM Resultat ORDER BY Omgang DESC) ORDER BY Omgang DESC
/JohanSv: Sortering