Avatar billede simsen Mester
15. juli 2010 - 23:44 Der er 2 kommentarer og
1 løsning

Kan ikke få udregning i case til at virke

Hej,

Jeg har to tabeller:

Poll_Answers med felterne answersText, answersCount
Poll_Questions med feltet questionAnswersCount

I Poll_Answers har jeg to rækker - en med Hund, 5 og en med Kat, 4
I Poll_Answers har jeg en række med questionId = 2 og 9 i questionAnswersCount

Nu vil jeg så beregne den procent vise udregning for henholdsvis Hund og Kat....

Jeg forsøger således:

SELECT
pa.answersText, 
pa.answersCount, 
(CASE WHEN pa.answersCount = 0 THEN 0 ELSE Convert(decimal, ((pa.answersCount/pq.questionAnswersCount) * 100)) END) as votepercentage
FROM Poll_Questions as pq
join Poll_Answers as pa on pa.questionId = pq.questionId
WHERE pq.questionId = 2
ORDER BY pa.answersText

Jeg får ingen fejl - men den kommer ud med 0 for både Hund og Kat i votepercentage......

Og den skulle komme ud med:
Hund: 5/9*100 = 55,55
Kat: 4/9*100 = 44,44

Nogen der kan hjælpe med at rette sql sætningen til?

mvh
simsen :-)
Avatar billede HenrikSjang Nybegynder
16. juli 2010 - 08:19 #1
Du er tæt på.

For det første bør du converte til decimal(5,2) i stedet for bare decimal. Så tvinger du resultatet til at have max 2 decimaler efter kommaet.

Og grunden til at du får 0, er at du laver division med to integers her:
pa.answersCount/pq.questionAnswersCount, og når du gør det, bliver resultatet implicit også til en int. Og da resultatet af divisionen vil være noget med 0,55, så smides decimalerne væk i cast'en til int.

Enten skal du explicit caste mindst en af disse værdier til en decimal, eller kan du snyde ved at gange en af dem med 1.0.

Sådan her:

SELECT
pa.answersText,
pa.answersCount,
(CASE WHEN pa.answersCount = 0 THEN 0 ELSE Convert(decimal(5,2), ((pa.answersCount*1.0/pq.questionAnswersCount*1.0) * 100)) END) as votepercentage
FROM Poll_Questions as pq
join Poll_Answers as pa on pa.questionId = pq.questionId
WHERE pq.questionId = 2
ORDER BY pa.answersText
Avatar billede simsen Mester
16. juli 2010 - 09:04 #2
Hej sjang,

Tusinde tak for hjælpen. Dejligt, du ikke kun gider give mig resultatet men også forklarer hvorfor :-)

Smid et svar og du skal få dine points.
Avatar billede HenrikSjang Nybegynder
16. juli 2010 - 11:15 #3
:)
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