Avatar billede clausjul Nybegynder
12. december 2002 - 10:02 Der er 30 kommentarer og
1 løsning

Decimal tal med 2 tal

Hej

Når jeg skriver SELECT SUM(value) AS VALUE og får som resultat:

245.5,

men jeg ønsker at have 245.50 og ikke 245.5 - hvordan kan man tilføje et nul til i SELECT processen?
Avatar billede kennie_nm Nybegynder
12. december 2002 - 10:04 #1
du skal vel bruge en formatteringsfunktion der hvor du foretager forespørgslen fra
Avatar billede bennytordrup Nybegynder
12. december 2002 - 10:06 #2
select convert(decimal(19,2), sum(Value)) as value
Avatar billede clausjul Nybegynder
12. december 2002 - 10:19 #3
Hm.. Her er min SQL:

SELECT CONVERT(decimal(19,2),SUM(CONVERT(float,REPLACE(beregnethonorar,',','.')))) AS sum_beregnethonorar FROM krtilbud_kontrakt_skema_3 WHERE tilbudid=93

Grunden til at jeg bruger CONVERT i beregnethonorar er, at den er en varchar med dansk decimalseperator. Den skal også have lov til at modtage bogstaver (som selvfølgelig er en fejl).

i SUM vil jeg altid have 2 decimaler uanset hvad, f.eks. 100,00 200,00 200,15, 200,10 ....
Avatar billede bennytordrup Nybegynder
12. december 2002 - 10:24 #4
Hvad datatype er beregnethonorar?
Avatar billede clausjul Nybegynder
12. december 2002 - 10:26 #5
varchar
Avatar billede bennytordrup Nybegynder
12. december 2002 - 10:27 #6
hvorfor, om jeg må have lov at spørge?
Avatar billede clausjul Nybegynder
12. december 2002 - 10:30 #7
Ja, fordi man skal også have mulighed for at indsætte andre tegn udover tal. Det er selvfølgelig en fejl, men der foretages en kontrol andetsteds.
Avatar billede bennytordrup Nybegynder
12. december 2002 - 10:33 #8
Prøv

SELECT SUM(CONVERT(decimal(19,2),REPLACE(beregnethonorar,',','.'))) AS sum_beregnethonorar FROM krtilbud_kontrakt_skema_3 WHERE tilbudid=93
Avatar billede clausjul Nybegynder
12. december 2002 - 10:58 #9
Nej, resultatet giver kun 7724,4 og ikke 7724,40
Avatar billede bennytordrup Nybegynder
12. december 2002 - 11:11 #10
Det lyder mærkeligt, da decimal(19,2) altid har fast to decimaler.
Avatar billede clausjul Nybegynder
12. december 2002 - 12:09 #11
Det må have noget at gøre med REPLACE?
Avatar billede terry Ekspert
12. december 2002 - 13:07 #12
clausjul>Lets look at this from another angle! SQL Server is a database for stroing data. You will more than likely be using some other application for displaying the result of the SQL Select. So I would do my formatting there and NOT in the SQL.
Avatar billede janus_007 Nybegynder
12. december 2002 - 13:07 #13
Et lille trick fra en gammel SQL-mand *S*

SELECT SUM(CAST(beregnethonorar AS INT))*1.00 AS sum_beregnethonorar FROM krtilbud_kontrakt_skema_3 WHERE tilbudid=93

Håber du kan bruge det :O)
Avatar billede clausjul Nybegynder
08. april 2003 - 08:00 #14
Der er desværre ikke fundet en løsning på den - så jeg slutter her.
Avatar billede janus_007 Nybegynder
08. april 2003 - 09:16 #15
Der er da fundet en løsning på den, min løsning virker! Den er efterprøvet og anvendt utallige gange igennem tiden.

Vær venlig at genoptage spørgsmålet.
Avatar billede clausjul Nybegynder
08. april 2003 - 10:13 #16
Hvis jeg skriver

SELECT SUM(CAST(100 AS INT)) * 1.00 AS sum_beregnethonorar

Så er resultatet 100 og ikke 100,00 som jeg ville have. Men jeg har løst problemet med noget kodning, hvor den finder ud af, om der er komma, og hvis ikke, så sættes ,00 på.
Avatar billede bennytordrup Nybegynder
08. april 2003 - 10:33 #17
Med den kodning har du ikke fulgt de anvisninger, du har fået.

SELECT SUM(CAST(100 AS DECIMAL(19,2))) AS sum_beregnethonorar

vil give dig 2 decimaler uanset hvad. Det nummer, du gør med at gange med 1.00 ændrer resultatet til en float, og det giver dig variabelt antal decimaler.

Hvis der absolut skal ganges med en eller anden værdi efter summeringen, så gør følgende:


SELECT cast(SUM(CAST(100 AS INT)) * 1.00 as decimal(19,2)) AS sum_beregnethonorar

IMO bør du åbne et nyt spørgsmål med reference til dette og uddele nogle points for svarene!
Avatar billede clausjul Nybegynder
08. april 2003 - 10:37 #18
Jeg har lige copy/pastet

SELECT SUM(CAST(100 AS DECIMAL(19,2))) AS sum_beregnethonorar

- Giver 100

SELECT cast(SUM(CAST(100 AS INT)) * 1.00 as decimal(19,2)) AS sum_beregnethonorar

- Giver 100

Så det løser jo ikke problemet???
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:37 #19
SELECT SUM(CAST(100 AS INT)) * 1.00 AS sum_beregnethonorar

Den virker nu ellers fint nok hos mig og alle andre steder!, underligt at du pludselig vil have et komma. Du spurgte efter 245.50 og ikke 245.5 !!
Avatar billede clausjul Nybegynder
08. april 2003 - 10:40 #20
Har skrevet i et tidligere indlæg: i SUM vil jeg altid have 2 decimaler uanset hvad, f.eks. 100,00 200,00 200,15, 200,10 .... Men det er korrekt at jeg nævnte det i starten.. Mærkeligt at det ikke virker hos mig :-(
Avatar billede bennytordrup Nybegynder
08. april 2003 - 10:41 #21
Her er resultatet af

SELECT cast(SUM(CAST(100 AS INT)) * 1.00 as decimal(19,2)) AS sum_beregnethonorar

:

sum_beregnethonorar
100.00

(1 row(s) affected)
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:42 #22
Prøv lige at fyre denne her af:
sp_helpdb databasenavn

Og paste status feltet her :O)
Avatar billede bennytordrup Nybegynder
08. april 2003 - 10:42 #23
SELECT SUM(CAST(100 AS DECIMAL(19,2))) AS sum_beregnethonorar

giver


sum_beregnethonorar
100.00

(1 row(s) affected)
Avatar billede bennytordrup Nybegynder
08. april 2003 - 10:42 #24
janus >> Hvad skulle det hjælpe? De ovenstående statements tager ikke fat i nogen database.
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:44 #25
Ja jeg har altså ingen probs med hverken bennys eller min egen :O)
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:45 #26
benny-> jo da, husk lige at skrive det korrekte dbnavn ved databasenavnet.

sp_helpdb <databasenavn> , om du vil..
Avatar billede bennytordrup Nybegynder
08. april 2003 - 10:50 #27
janus > Hvad vil du have ud af det
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:52 #28
Måske er denne her sat til 0 på serveren ?? : SELECT @@MAX_PRECISION
Avatar billede bennytordrup Nybegynder
08. april 2003 - 10:53 #29
Det var selvfølgelig en mulighed. Den dukker dog ikke op via sp_helpdb, og på mine databaser står den til 38.
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:53 #30
Jeg er nysgerrig... Syntes det lyder meget underligt!
Avatar billede janus_007 Nybegynder
08. april 2003 - 10:54 #31
Nej det gør den ikke, men min står også til 38 !
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
Computerworld tilbyder specialiserede kurser i database-management

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