15. juli 2010 - 23:44Der 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?
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
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.