sawMedlem sedan mars 20011 880 inlägg Jag försöker att ta fram medelplaceringen på låter i tre avseénde, placering Sverige, placering Europa och placering Världen.
Nu är det så att om det inte finns något inskrivit i databasen får bestämd låt, så har jag satt som defoult 0. Detta uppfatar ju databasen som bättre än 1. Hur löser jag det?
Hur talar jag om att jag bara vill ha två decimaler?
Så här ser SQL:en ut.
SQL = "SELECT t_SongTitlar.songtitel, Avg(t_Datum.PlaceringSv) AS MedelförPlaceringSv, Avg(t_Datum.PlaceringEu) AS MedelförPlaceringEu, Avg(t_Datum.PlaceringVärlden) AS MedelförPlaceringVärlden " & _
" FROM t_SongTitlar INNER JOIN t_Datum ON t_SongTitlar.titel_Id = t_Datum.Sång_ID " & _
" GROUP BY t_SongTitlar.songtitel " & _
" HAVING (((t_SongTitlar.songtitel)='" & List1.Text & "'))"
Set mittRS2 = minDB.OpenRecordset(SQL, dbOpenDynaset)
If Not mittRS2.EOF Then
If IsNull(mittRS2!MedelförPlaceringSv) Then
Label3.Caption = "Ingen placering i Sverige"
ElseIf IsNull(mittRS2!MedelförPlaceringEU) Then
Label3.Caption = "Placering i Sverige: " & mittRS2!MedelförPlaceringSv
ElseIf IsNull(mittRS2!MedelförPlaceringVärlden) Then
Label3.Caption = "Placering i Sverige: " & mittRS2!MedelförPlaceringSv & " Placering i Europa: " & mittRS2!MedelförPlaceringEU
Else
Label3.Caption = "Placering i Sverige: " & mittRS2!MedelförPlaceringSv & " Placering i Europa: " & mittRS2!MedelförPlaceringEU & " Placering i Världen: " & mittRS2!MedelförPlaceringVärlden
End If
End If
Tacksam för hjälp
LarsGMedlem sedan dec. 200012 464 inlägg Det blir ganska komplext
SQL = "SELECT t_SongTitlar.songtitel, " &_
" cdbl(sum(t_Datum.PlaceringSv))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum " & _
" where sång_id = st.titel_id " &_
" and placeringSv /= 0)) AS MedelförPlaceringSv, " & _
" cdbl(sum(t_Datum.PlaceringEu))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum " & _
" where sång_id = st.titel_id " &_
" and placeringEu /= 0)) AS MedelförPlaceringEu, " & _
" cdbl(sum(t_Datum.PlaceringVärlden))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum " & _
" where sång_id = st.titel_id " &_
" and placeringVärlden /= 0)) AS MedelförPlaceringVärlden " & _
" FROM t_SongTitlar as st INNER JOIN t_Datum as td ON ts.titel_Id = td.Sång_ID " & _
" where t_SongTitlar.songtitel = '" & List1.Text & "'" & _
" GROUP BY ts.songtitel "
Det skulle bli enklare om du hade varsin tabell för placeringar på olika listor. I dem skulle du bara ha poster för de datum då en viss låt hade en placering. I så fall skulle du kunna använda avg direkt. (Det kanske för med sig andra nackdelar dock).
Du kan bestämma antalet decimaler med hjälp av funktionerna ROUND eller Formatnumber.
sawMedlem sedan mars 20011 880 inlägg Tack LarsG.
Decimalerna hittade jag i en gammal ASP bok.
Att göra om databasen och ändra listorna blir nog förmycket jobb.
Jag skall testa din kod och kolla.
Tack för din hjälp
sawMedlem sedan mars 20011 880 inlägg Aj, pumpen direct :(
Jag fick detta error:
Runtime error 3135
Syntaxerror in JOIN operation.
Vad tror du??
LarsGMedlem sedan dec. 200012 464 inlägg Lite slarv av mig. Jag hade skrivit ts i stället för st på ett ställe.
SQL = "SELECT st.songtitel, " &_
" cdbl(sum(td.PlaceringSv))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum " & _
" where sång_id = st.titel_id " &_
" and placeringSv /= 0)) AS MedelförPlaceringSv, " & _
" cdbl(sum(td.PlaceringEu))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum " & _
" where sång_id = st.titel_id " &_
" and placeringEu /= 0)) AS MedelförPlaceringEu, " & _
" cdbl(sum(td.PlaceringVärlden))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum " & _
" where sång_id = st.titel_id " &_
" and placeringVärlden /= 0)) AS MedelförPlaceringVärlden " & _
" FROM t_SongTitlar st INNER JOIN t_Datum td ON st.titel_Id = td.Sång_ID " & _
" where st.songtitel = '" & List1.Text & "'" & _
" GROUP BY st.songtitel "
sawMedlem sedan mars 20011 880 inlägg Ajajaj.
Runtime error 3075
Syntaxerror (Missing operator) in qeryexpression 'sång_id=st.titel_id AND placeringSv /0
Vad tror du?
LarsGMedlem sedan dec. 200012 464 inlägg Om du byter /= mot <> så blir det kanske bättre.
Du kan ju skriva ut värdet på variabeln SQL och prova frågan direkt i Access. Då får du kanske ett bättre felmeddelande.
sawMedlem sedan mars 20011 880 inlägg :o
Samma resultat, error...
LarsGMedlem sedan dec. 200012 464 inlägg Hur ser frågan ut om du skriver ut variabeln SQL?
response.write "SQL: " & sql & "<br>"
sawMedlem sedan mars 20011 880 inlägg Jag kan inte göra det(tror jag) jag jobbar just nu i VB 6.0
sawMedlem sedan mars 20011 880 inlägg
Ursprungligen av saw Jag kan inte göra det(tror jag) jag jobbar just nu i VB 6.0
När jag kör debug.print sql så har jag fått fram detta:
SELECT st.songtitel, cdbl(sum(td.PlaceringSv))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum where sång_id = st.titel_id and placeringSv <>= 0)) AS MedelförPlaceringSv, cdbl(sum(td.PlaceringEu))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum where sång_id = st.titel_id and placeringEu <>= 0)) AS MedelförPlaceringEu, cdbl(sum(td.PlaceringVärlden))/cdbl((select iif(count(*)=0,1,count(*)) from t_datum where sång_id = st.titel_id and placeringVärlden <>= 0)) AS MedelförPlaceringVärlden FROM t_SongTitlar st INNER JOIN t_Datum td ON st.titel_Id = td.Sång_ID where st.songtitel = 'Beautiful Words' GROUP BY st.songtitel
LarsGMedlem sedan dec. 200012 464 inlägg Nej, jag ser inget direkt fel. Det kan ju vara att Access inte gillar iif och count(*) t.ex. Du kan ju testa och ta bort dom och se vad som händer.
SELECT st.songtitel,
cdbl(sum(td.PlaceringSv))/
cdbl((select count(*)
from t_datum
where sång_id = st.titel_id
and placeringSv <>= 0)) AS MedelförPlaceringSv,
cdbl(sum(td.PlaceringEu))/
cdbl((select count(*)
from t_datum
where sång_id = st.titel_id
and placeringEu <>= 0)) AS MedelförPlaceringEu,
cdbl(sum(td.PlaceringVärlden))/
cdbl((select count(*)
from t_datum
where sång_id = st.titel_id
and placeringVärlden <> = 0)) AS MedelförPlaceringVärlden
FROM t_SongTitlar st INNER JOIN
t_Datum td ON st.titel_Id = td.Sång_ID
where st.songtitel = 'Beautiful Words'
GROUP BY st.songtitel
Tyvärr, så har jag inget mer konkret
sawMedlem sedan mars 20011 880 inlägg Nix det går inte.
Han oppunera sig mot det här:
Where sång_id = st.titel_id and placeringSv <>= 0
Är det kört??? :(
När jag försöker köra frågan i ACCESS så får jag följande fel:
Yoou tryed to execute a query that dosen't include the specified expressen 'titel_id' as part off an aggregate funktion.
För mig är det här grekiska, hur är det för dig??? ;)
LarsGMedlem sedan dec. 200012 464 inlägg blind as a bat.
Where sång_id = st.titel_id and placeringSv <> 0
sawMedlem sedan mars 20011 880 inlägg Samma fel:
Yoou tryed to execute a query that dosen't include the
specified expressen 'titel_id' as part off an aggregate
funktion.
LarsGMedlem sedan dec. 200012 464 inlägg Jo, jag föstår väl grekiskan
SELECT st.songtitel,
cdbl(sum(td.PlaceringSv))/
cdbl((select iif(count(*)=0,1,count(*))
from t_datum inner join t_SongTitlar
on titel_Id = Sång_ID
where placeringSv <> 0
and songtitel = st.songtitel)) AS MedelförPlaceringSv,
cdbl(sum(td.PlaceringEu))/
cdbl((select iif(count(*)=0,1,count(*))
from t_datum inner join t_SongTitlar
on titel_Id = Sång_ID
where placeringEu <> 0
and songtitel = st.songtitel)) AS MedelförPlaceringEu,
cdbl(sum(td.PlaceringVärlden))/
cdbl((select iif(count(*)=0,1,count(*))
from t_datum inner join t_SongTitlar
on titel_Id = Sång_ID
where placeringVärlden <> 0
and songtitel = st.songtitel)) AS MedelförPlaceringVärlden
FROM t_SongTitlar st INNER JOIN
t_Datum td ON st.titel_Id = td.Sång_ID
where st.songtitel = 'Beautiful Words'
GROUP BY st.songtitel
sawMedlem sedan mars 20011 880 inlägg Nu vågar jag snart inte fortsätta med det här:
RunTime Error 3296
Join Expressen not supported.
Jag antar att det här är för avancerat för ACCESS? :(
LarsGMedlem sedan dec. 200012 464 inlägg Nej, det ser mörkt ut. Jag har inget direkt att komma med just nu.