webForumDet fria alternativet

Sortera utanför databasen

ASP

10 svar · 377 visningar · startad av Alkvettern

Medlem sedan okt. 2002108 inlägg
Frågan#1

Hej

Ska sortera uppgifterna i en fotbollstabell.

Förs så ska man sortera efter poäng, och om poängen är lika
ska man sortera efter målskillnad. (gjorta mål minus insläppta)

Att sortera efter poäng är inga problem.
Problemet kommer sen. Målskillnad har ingen egen post i databasen. Jag kör en uträkning på gjordamål minus insläppta mål och visar sedan resultatet.

Hur gör jag för att sortera efter något som inte finns i databasen

Min uträkning ser ut så här:

 <% 
differens=Cint(oRs("malg"))-cInt(oRs("mali"))
Response.write differens
%>
Medlem sedan okt. 20005 273 inlägg
#2

Du kan göra den uträkningen i SQL satsen istället

[red]
SELECT ... ...ORDER BY Poang DESC, (malg - mali) DESC, malg DESC"
[/red]

På detta vis sorterar den först på poäng sen målskillnad sen antal gjorda mål......

mvh icaaq

Medlem sedan okt. 20005 273 inlägg
#3

Du kan även göra din uträkning av målskillnaden i select satsen

[red]
SELECT ... ..., malg - mali as skillnad ORDER BY ... ... ...
[/red]

SEn skriver du ut den med

[red]
Response.Write oRs("skillnad")
[/red]

mvh icaaq

Medlem sedan maj 200010 687 inlägg
#4

Är man riktigt cool så lägger man även in det i en view. ;)

Medlem sedan okt. 20005 273 inlägg
#5

Så cool har jag aldrig varit......kan du visa?

mvh icaaq

Medlem sedan mars 2001309 inlägg
#6

Det Erik Juhlin menar är att man skapar en view(vy) som ser ut som en tabell som har ett fält med malg - mali som resultat .

vyn kommer då innehålla.

Poäng,målskillnad, och namn på laget då !

Medlem sedan okt. 2002108 inlägg
#7

Tack!

Medlem sedan maj 2001156 inlägg
#8

Undrar hur man kan göra en motsvarande sortering om de fält man önskar sortera efter är av texttyp.

Följande genererar ett felmeddelande pga felaktiga typer.
Kan man i SELECT-satsen konvertera summa1 och summa2 till tal, och därmed kunna använda differensen som sortering?

SELECT DISTINCT SUM(OSBSTD.UCIVQT) AS Expr1, OCUSMA.OKCUNM, SUM(OSBSTD.UCSAAM) AS summa1, SUM(OSBSTD.UCUCOS) AS summa2
FROM         OSBSTD INNER JOIN
                      OCUSMA ON OSBSTD.UCCUNO = OCUSMA.OKCUNO
GROUP BY OSBSTD.UCITNO, OCUSMA.OKCUNM
HAVING      (OSBSTD.UCITNO = '53020 ')
ORDER BY (summa1 - summa2) DESC

MvH

David

Medlem sedan jan. 20022 440 inlägg
#9
SELECT DISTINCT SUM(OSBSTD.UCIVQT) AS Expr1, OCUSMA.OKCUNM, SUM(OSBSTD.UCSAAM) AS summa1, SUM(OSBSTD.UCUCOS) AS summa2
FROM         OSBSTD INNER JOIN
                      OCUSMA ON OSBSTD.UCCUNO = OCUSMA.OKCUNO
GROUP BY OSBSTD.UCITNO, OCUSMA.OKCUNM
HAVING      (OSBSTD.UCITNO = '53020 ')
ORDER BY (3 - 4) DESC

/RED för mycket capslock.... :r

Medlem sedan dec. 200012 464 inlägg
#10

Då får du konvertera dom innan summeringen

SELECT SUM(cast(OSBSTD.UCIVQT as integer)) AS Expr1, OCUSMA.OKCUNM, SUM(OSBSTD.UCSAAM) AS summa1, SUM(OSBSTD.UCUCOS) AS summa2
FROM         OSBSTD INNER JOIN
                      OCUSMA ON OSBSTD.UCCUNO = OCUSMA.OKCUNO
where  (OSBSTD.UCITNO = '53020 ')
GROUP BY OSBSTD.UCITNO, OCUSMA.OKCUNM
ORDER BY (summa1 - summa2) DESC

t.ex.

Att ha med distinct i denna fråga är onödigt. Jag bytte ut having också då det är effektivare att använda where.

Medlem sedan jan. 20022 440 inlägg
#11

Eller så kan LarsG bäst :P

260 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)