Hej.
Skulle behöva få hjälp med en sql fråga som tar ut TOP 10 med högst snittbetyg från min databas
I tabellen sparar jag antalet rösttillfällen och det totala resultatet. Så här visar jag resultatet.
varVoteResult = varVoteTotal / varVoteTimes
<%=left(varVoteResult,3)%> (<%=varVoteTimes%> votes)
<% for i = 1 to varVoteResult %>
<img src="ico_plus.gif" align="absmiddle">
<% next %>
Vill alltså få ut ett recordset med de tio bästa.
Peter SMedlem sedan dec. 20025 483 inlägg Hej!
Följ gärna @nders guide (y)
Hmmm... förstår inte vad du menar.
Har inte någon aning om hur syntaxen för något sådant ska se ut men jag antar att det går att göra. Tänker mig något enligt nedan.
sql = "SELECT TOP 10 * FROM T_mediainfo "
sql = sql &" LEFT JOIN T_movie_poster ON T_mediainfo.id = T_movie_poster.movie_id"
sql = sql &" WHERE visa_lank = true ORDER BY [b](vote_total / vote_times)[/b] DESC, T_mediainfo.id"
Microsoft JET Database Engine error '80040e57'
Overflow
Peter SMedlem sedan dec. 20025 483 inlägg Så här menar jag (exempel):
DBMS
MS Access 2000
Tabellstruktur/-innehåll
Tabell_1
[B] pnr (char(10), PK) | namn (varchar(50)) | ort (varchar(30))[/B]
-----------------------------------------------------------------
4605013490 | per persson | byn
-----------------------------------------------------------------
7011165622 | lisa karlsson | staden
-----------------------------------------------------------------
Tabell_2
[B] pnr (char(10), PK, FK Tabell_1.pnr) | hobby (varchar(50), PK))[/B]
------------------------------------------------------------------
4605013490 | fotboll
------------------------------------------------------------------
4605013490 | knyppling
------------------------------------------------------------------
7011165622 | statistik
------------------------------------------------------------------
Önskat resultat
pnr | namn | antal_hobbys
-----------------------------------------------
4605013490 | per persson | 2
-----------------------------------------------
7011165622 | lisa karlsson | 1
-----------------------------------------------
Testad SQL-fråga och resultat
SQL-fråga
select t1.pnr
, t1.namn
, count(*) as antal_hobbys
from Tabell_1 t1
left
join Tabell_2 t2
on t1.pnr = t2.pnr
group
by t1.pnr
Resultat
Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'namn'.
Hade glömt bort detta men nu är det dags att åter ta ett litet krafttag.
Går det att göra lite division direkt i en sql fråga?
Det jag vill åstakomma är:
vote_total / vote_times AS voteResult
och sortera hela mitt recordset på voteResult.
tabellen skrev:
T_media
------------------------------
id | vote_total | vote_times
Önskat resultat skrev:
3,12
3,00
2,8
1
@ndersMedlem sedan juni 200032 969 inlägg select votetotal / vote_times as voteresult
order by 1 desc
Hej Anders! :)
Det var ungefär så jag hoppades att man skulle kunna göra.
Min sqlfråga ser numer ut så här:
sql = "SELECT TOP 10 *, vote_total / vote_times as voteresult FROM T_mediainfo "
sql = sql &" LEFT JOIN T_movie_poster ON T_mediainfo.id = T_movie_poster.movie_id"
sql = sql &" WHERE visa_lank = true AND NOT vote_total is null ORDER BY voteresult desc, T_mediainfo.id"
Och ger följande fel
Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.
Hmm...
kör jag bara
SELECT vote_total / vote_times as voteresult FROM T_mediainfo ORDER BY 1 DESC
så får jag...
Microsoft JET Database Engine error '80040e57'
Overflow
Tydligen så är både vote_total och cote_times null i vissa fält. Hur testar jag det?
@ndersMedlem sedan juni 200032 969 inlägg Vad är det för datatyper på fälten?`
Ang. felmeddelandet i ditt näst sista inlägg: du kan inte ange namnet på ett skapat fält i order by, utan du måste ange dess ordningsnummer, som jag gjorde i mitt exempel.
hmmm... datatypen på båda fälten är numeriska.
SELECT *, vote_total / vote_times as voteresult FROM T_mediainfo ORDER BY 1 DESC
Hur gör man för att exkludera att göra en division på de fält som är null ?
Var kan man läsa mer om vilka kommandon som är giltiga i en sql fråga? Antar att man inte kan köra vb-script rakt av.
@ndersMedlem sedan juni 200032 969 inlägg
Hur gör man för att exkludera att göra en division på de fält som är null ?
... WHERE fält IS NOT NULL
Var kan man läsa mer om vilka kommandon som är giltiga i en sql fråga?
Till exempel hos devguru.
Hej Anders :)
Jag vill returnera alla rader.
De rader som var_total och vote_times båda är något annat annat än null så ska även "vote_total / vote_times as voteresult" köras
Typ:
SELECT *, if not vote_total is null and not vote_times is null then vote_total / vote_times as voteresult end if FROM T_mediainfo ORDER BY 1 DESC
hmmm...
Nu är jag ju erkännt dum igen. Visst går det utmärkt att lägga på where... då jag bara vill ha ut top 10. :r
Nähä...
Det vara inte alla nullfält som ställer till det för mig.
Nu kör jag:
sql = "SELECT vote_total / vote_times as voteresult FROM T_mediainfo
WHERE vote_total IS NOT NULL AND vote_times IS NOT NULL
ORDER BY 1"
Och så fort jag lägger på ORDER BY 1 så får jag:
Microsoft JET Database Engine error '80040e57'
Overflow
RED...
Ändrade till:
WHERE vote_total > 0 AND vote_times > 0
och det fungerar nu. Tack för assistansen alla. Frustrerande när man fastnar på bagateller pga sin okunskap. Tjing!