Hej! <code> Tack det funkar fint! Har kommit såhär... Denna kodsnutt blir det inge felmeddelande. Är det ömöligt att lösa eller måste jag testa någon annan lösning? Det här kanske fungerar: Har gjort ett lite exempel på hur man kan summera, sedan göra en join. Slippa gruppera alla fält så man måste gär i en fråga. Dessutom använder exemplet sparad fråger med parametrar. Vilket borde ge bättre prestanda. Tack! <code> > Du får sortera efter det index kolumnen har i din fråga. Ok. Jag har nog använt Access för mycket. Har för mig att man måste ange index där. Så här blev allt... Lyfter denna tråd för ytterligare en fråga. Lägg till HAVING Mal+Pass > 0 mellan GROUP BY-delen och ORDER BY-delen. Får felmeddelandet... Frågan ser ut så här om jag skriver ut den. Jo det funkar fint! Det som ser skumt ut är MAL+Pass AS Poang i nedanstående:Summera i SQL fråga.
Håller på att göra om upplägget på min poängliga. Har brutit ut alla ”poäng” och lagt dem i en egen tabell istället.
Problemet är att jag inte får till SQL frågan.
Jag vill att det summeras för varje id och inte hela kolumnen, har testa många varianter nu men ”han” köper inte mina lösningar…
Så här började jag:
<code>
"SELECT SUM(StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare_MalPass) AS Pass FROM StatistikSpelare WHERE StatistikSpelare_Datum >=#" & Year(date) & "-01-01# AND StatistikSpelare_Datum <=#" & Year(date) & "-12-31# "
</code>
Mvh MarcusSv: Summera i SQL fråga.
SELECT SUM(StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare_MalPass) AS Pass FROM StatistikSpelare WHERE StatistikSpelare_Datum >=#" & Year(date) & "-01-01# AND StatistikSpelare_Datum <=#" & Year(date) & "-12-31# GROUP BY id
</code>Sv: Summera i SQL fråga.
Men nu skulle jag behöva utveckla fråga lite.
Måste hämta in namn, efternamn och posistion från tabellen Spelare.
Sortera utskriften också.
Är osäker på hur jag skall få till det när SUM ligger med i början.
<code>
"SELECT SUM(StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare_MalPass) AS Pass FROM StatistikSpelare,Spelare " &_
" WHERE StatistikSpelare_Datum >=#" & Year(date) & "-01-01# AND StatistikSpelare_Datum <=#" & Year(date) & "-12-31# " &_
" AND StatistikSpelare_id=Spelare.IDSpelare " &_
" GROUP BY StatistikSpelare_id" &_
" ORDER BY Mal+Pass DESC, Spelare.EfterNamn ASC "
</code>
Mvh MarcusSv: Summera i SQL fråga.
<code>
Addera = "SELECT SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass FROM StatistikSpelare,Spelare " &_
" WHERE StatistikSpelare.StatistikSpelare_Datum >=#" & Year(date) & "-01-01# AND StatistikSpelare.StatistikSpelare_Datum <=#" & Year(date) & "-12-31# " &_
" AND StatistikSpelare.StatistikSpelare_SpelareId=Spelare.IDSpelare " &_
" GROUP BY StatistikSpelare.StatistikSpelare_id" &_
" "
</code>
Hur gör jag så att jag kommer åt fält ur tabellen Spelare. Hur skall det skrivas vid SELECT ? Testat med ,* osv... Men då får jag:
"Du försökte köra en fråga med en mängdfunktion som inte innehöll det.."
Mvh MarcusSv: Summera i SQL fråga.
Mvh MarcusSv: Summera i SQL fråga.
<code>SELECT SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass, Spelare.Kolumn1, Spelare.Kolumn2 FROM StatistikSpelare,Spelare
WHERE StatistikSpelare.StatistikSpelare_Datum >=#" & Year(date) & "-01-01#" & AND StatistikSpelare.StatistikSpelare_Datum <=#" & Year(date) & "-12-31# " & AND StatistikSpelare.StatistikSpelare_SpelareId=Spelare.IDSpelare GROUP BY StatistikSpelare.StatistikSpelare_id, Spelare.Kolumn1, Spelare.Kolumn2
</code>Sv: Summera i SQL fråga.
Koden kanske är lite gröttig. Men hoppas den kan vara till hjälp:
Programarkivet:Avancerad summering i flera fråger i ASPSv: Summera i SQL fråga.
Skall kika in på den "gröttiga" koden!
En sista fråga bara...
Har lagt till en extra för poäng.
<code>Mal+Pass AS Poang</code>
Hur skriver man sen så listan sorteras efter Poang?
<code>ORDER BY </code>
Mvh MarcusSv: Summera i SQL fråga.
SELECT Mal+Pass AS Poang FROM Tabell ORDER BY 1
</code>
Du får sortera efter det index kolumnen har i din fråga.Sv: Summera i SQL fråga.
Nja, den funktionaliteten är 'deprecated' i SQL (dvs att det kommer att tas bort i en framtida version och man bör därför inte använda det). Det fungerar bra att använda det alias man gav den beräknade kolumnen, alternativt hela uttrycket.
<code>
SELECT Mal+Pass AS Poang FROM Tabell ORDER BY Poang
SELECT Mal+Pass AS Poang FROM Tabell ORDER BY Mal+Pass
</code>Sv: Summera i SQL fråga.
Sv: Summera i SQL fråga.
<code>
Addera = "SELECT SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass, Mal+Pass AS Poang, SUM(StatistikSpelare.StatistikSpelare_Narvaro) AS Narvaro,"&_
" Spelare.Efternamn,Spelare.Fornamn,Spelare.IDSpelare,Spelare.Position FROM StatistikSpelare,Spelare " &_
" WHERE StatistikSpelare.StatistikSpelare_Datum >=#" & Year(date) & "-01-01# AND StatistikSpelare.StatistikSpelare_Datum <=#" & Year(date) & "-12-31# " &_
" AND StatistikSpelare.StatistikSpelare_SpelareId=Spelare.IDSpelare " &_
" GROUP BY StatistikSpelare.StatistikSpelare_id, Spelare.Efternamn,Spelare.Fornamn,Spelare.Position,Spelare.IDSpelare" &_
" ORDER BY 3 DESC ,Spelare.Efternamn "
</code>
Om jag körde med
<code>
ORDER BY Poang
</code>
Så fick jag ett felmeddelande "För få parametrar angavs. 1 förväntades."
Tack igen!
Mvh MarcusSv: Summera i SQL fråga.
Hur skall det skrivas så att endast poster där Poäng är större än 0 visar
<code>Addera = "SELECT SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass, Mal+Pass AS Poang, SUM(StatistikSpelare.StatistikSpelare_Narvaro) AS Narvaro,"&_
" Spelare.Efternamn,Spelare.Fornamn,Spelare.IDSpelare,Spelare.Position FROM StatistikSpelare,Spelare " &_
" WHERE StatistikSpelare.StatistikSpelare_Datum >=#" & Year(date) & "-01-01# AND StatistikSpelare.StatistikSpelare_Datum <=#" & Year(date) & "-12-31# " &_
" AND StatistikSpelare.StatistikSpelare_SpelareId=Spelare.IDSpelare " &_
" GROUP BY StatistikSpelare.StatistikSpelare_id, Spelare.Efternamn,Spelare.Fornamn,Spelare.Position,Spelare.IDSpelare" &_
" ORDER BY 3 DESC ,Spelare.Efternamn "</code>
Har testat i att lägga med "Poang >0" i Where delen men det funkar ju inte så!
Mvh MarcusSv: Summera i SQL fråga.
Sv: Summera i SQL fråga.
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
Vad behöver jag lägga till något mer i den långa SQL satsen? Har testat olika tillägg i GROUP BY men det blir samma.
Mvh bruzeSv: Summera i SQL fråga.
SELECT SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass, Mal+Pass AS Poang, SUM(StatistikSpelare.StatistikSpelare_Narvaro) AS Narvaro, Spelare.Efternamn,Spelare.Fornamn,Spelare.IDSpelare,Spelare.Position FROM StatistikSpelare,Spelare WHERE StatistikSpelare.StatistikSpelare_Datum >=#2003-01-01# AND StatistikSpelare.StatistikSpelare_Datum <=#2003-12-31# AND StatistikSpelare.StatistikSpelare_SpelareId=Spelare.IDSpelare GROUP BY StatistikSpelare.StatistikSpelare_id, Spelare.Efternamn,Spelare.Fornamn,Spelare.Position,Spelare.IDSpelare ORDER BY 3 DESC ,Spelare.Efternamn
Hoppas det är så du menar med hur den ser ut...
Mvh MarcusSv: Summera i SQL fråga.
Vad är det som ser "fel" ut?
Jag kan ju lösa mitt bekymmer Poang > 0 genom en if sats i bland utskriften, men det vore kul om SQL satsen fixade allt.
Mvh MarcusSv: Summera i SQL fråga.
SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass, Mal+Pass AS Poang
Jag antar att det refererar till de föregående kolumnerna och att Access accepterar det, men så kan man egentligen inte skriva i SQL. Eftersom det fungerade där trodde jag att det även fungerade i HAVING, men det gjorde det visst ej. Prova denna SQL sats då:
<code>
SELECT SUM(StatistikSpelare.StatistikSpelare_Mal) AS Mal
, SUM(StatistikSpelare.StatistikSpelare_MalPass) AS Pass
, Mal+Pass AS Poang
, SUM(StatistikSpelare.StatistikSpelare_Narvaro) AS Narvaro
, Spelare.Efternamn
, Spelare.Fornamn
, Spelare.IDSpelare
, Spelare.Position
FROM StatistikSpelare, Spelare
WHERE StatistikSpelare.StatistikSpelare_Datum >=#2003-01-01#
AND StatistikSpelare.StatistikSpelare_Datum <=#2003-12-31#
AND StatistikSpelare.StatistikSpelare_SpelareId=Spelare.IDSpelare
GROUP BY StatistikSpelare.StatistikSpelare_id
, Spelare.Efternamn
, Spelare.Fornamn
, Spelare.Position
, Spelare.IDSpelare
HAVING SUM(StatistikSpelare.StatistikSpelare_Mal) + SUM(StatistikSpelare.StatistikSpelare_MalPass) > 0
ORDER BY 3 DESC, Spelare.Efternamn
</code>
Du borde även kunna ändra det här:
WHERE StatistikSpelare.StatistikSpelare_Datum >=#2003-01-01#
AND StatistikSpelare.StatistikSpelare_Datum <=#2003-12-31#
till det här:
WHERE StatistikSpelare.StatistikSpelare_Datum BETWEEN #2003-01-01# AND #2003-12-31#