Avatar billede totalpc Seniormester
08. oktober 2008 - 22:49 Der er 9 kommentarer og
2 løsninger

sql avg skal ikke give mere end 1 decimaler

Hej
Jeg har denne sætning:
strSQL = "select art, avg(vægt) as gnsvægt from logbog group by art;"

Men den kan give et tal der fx hedder:
1,51666666666667

Det vil jeg gerne have kortet ned til fx 1,5
Hvordan gør jeg det?
Jeg har prøvet noget der ligner dette :

strSQL = "select art, CAST(AVG(vægt) as Decimal(9,2)) as gnsvægt from logbog group by art;"

Men det giver en fejl. Jeg ved heller ikke præcis hvad decimal 9,2 gør, har også set en med 14,2 men det virker heller ikke.
Avatar billede thesurfer Nybegynder
08. oktober 2008 - 22:57 #1
Citat fra http://www.functionx.com/sql/Lesson06.htm :

---

If you use dec(Precision, Scale), decimal(Precision, Scale), or numeric(Precision, Scale) types, the Precision number would control the maximum number of digits on the left side of the period (or the character used as the decimal separator of your language). The Scale factor specifies the maximum number of digits used on the right side of the period (or the character used as the decimal separator of your language).

---
Avatar billede arne_v Ekspert
09. oktober 2008 - 02:41 #2
Det var godt nok en ringe kilde.

Precicision er totale antal cifre ikke antal cifre til venstre for "komma".

DECIMAL(9,2) er nnnnnnn.nn ikke nnnnnnnnn.nn

Løsningen rigtigt nok at caste til DECIMAL(9,1).

Eller langt bedre: bare selecte uden at caste og lade ASP stå for formateringen.
Avatar billede totalpc Seniormester
09. oktober 2008 - 08:31 #3
Hvis jeg gør sådan:

strSQL = "select art, CAST(AVG(vægt) as Decimal(3,2)) as gnsvægt from logbog group by art;"

Så får jeg denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'CAST(AVG(vægt) as Decimal(3,2))'.

/statistik/gnsvægt-art.asp, line 13


Hvordan formaterer jeg ASP mæssigt ?
Avatar billede fennec Nybegynder
09. oktober 2008 - 08:54 #4
ASP:
val = round(rs("tal"),1)
Avatar billede fennec Nybegynder
09. oktober 2008 - 08:55 #5
...Eller:
response.write formatnumber(rs("tal"),1)

Så smider den både komme og tusindtals seperator (1.234.567,8)
Avatar billede totalpc Seniormester
09. oktober 2008 - 09:02 #6
Jeg har prøvet CInt(rs("sumvægt")) men den runder op til helt tal. Ville gerne have bare en enkelt decimal med!
Avatar billede michael_stim Ekspert
09. oktober 2008 - 09:05 #7
Det kan vel ikke overraske dig at den laver det til et heltal, når du beder den om det ;o) Kig i kommentaren lige før.
Avatar billede totalpc Seniormester
09. oktober 2008 - 09:09 #8
fennec det er perfekt! Takker, smid et svar.

Jeg kan ikke få formateringen til at virke I SQL'en
Avatar billede fennec Nybegynder
09. oktober 2008 - 11:27 #9
Så lige at "arne v" nævnte ASP formateringen før mig (dog uden kode), så måske det er en deler??
.o) <-- One Eyed Jack
Avatar billede totalpc Seniormester
09. oktober 2008 - 11:33 #10
yeps... arne_v smid et svar!
Avatar billede arne_v Ekspert
09. oktober 2008 - 15:25 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester