webForumDet fria alternativet

Medel stämmer inte???

18 svar · 326 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

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
#2

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
#3

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
#4

Aj, pumpen direct :(
Jag fick detta error:

Runtime error 3135
Syntaxerror in JOIN operation.
Vad tror du??

LarsGMedlem sedan dec. 200012 464 inlägg
#5

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
#6

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
#7

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
#8

:o
Samma resultat, error...

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Hur ser frågan ut om du skriver ut variabeln SQL?

response.write "SQL: " & sql & "<br>"
sawMedlem sedan mars 20011 880 inlägg
#10

Jag kan inte göra det(tror jag) jag jobbar just nu i VB 6.0

sawMedlem sedan mars 20011 880 inlägg
#11

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
sawMedlem sedan mars 20011 880 inlägg
#12

Ursprungligen av saw

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
#13

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
#14

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
#15

blind as a bat.

Where sång_id = st.titel_id and placeringSv <> 0
sawMedlem sedan mars 20011 880 inlägg
#16

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
#17

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
#18

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
#19

Nej, det ser mörkt ut. Jag har inget direkt att komma med just nu.

138 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)