2012-07-22 5 views
0

Cette requête est conçue pour faire un histogramme avec des tailles de bacs de 50.
enter image description hereNommer les bacs d'histogramme

Alors que histogrammes vont, cela signifie qu'il ya 1013 objets avec un compte (*) entre 0 et 49 .

Je voudrais faire le bac lire comme

0-49   1013 
50-99   2147 
100-149  1571 

Ma tentative est d'arrêter de ne pas faire ce que je dois

select interval + ' - '+interval*50-1 as bin,count(*) as number from 
(

select count(tblclaims.patientid) as counts, count(tblclaims.patientid)/50 as interval 
from tblclaims 
inner join patient on patient.patientid=tblclaims.patientid 
and patient.admissiondate = tblclaims.admissiondate 
and patient.dischargedate=tblclaims.dischargedate 
group by tblclaims.patientid 


) as t 
group by interval 
order by bin 

Je sais que cela va avoir jeté les choses interval + ' - ' comme varchar, mais quand j'ai essayé que les choses se sont ainsi détraqué

+0

Vous devez remplacer count (tblclaims.patientid) avec simplement tblclaims.patientid. L'utilisation d'une fonction d'agrégation sur un champ utilisé par un groupe est plutôt inhabituelle. Cela ne casse pas la requête, mais cela la rend plus difficile à comprendre. –

+0

@GordonLinoff merci pour la perspicacité. – wootscootinboogie

Répondre

2

si le seul problème est coulée, vous devez jeter chaque numéro de pièce à part:

select cast(interval*50 as nvarchar(max)) + '-' + cast(interval*50+49 as nvarchar(max)) 
+1

J'ai ajouté le "* 50" à la première partie de l'intervalle. Le questionneur l'avait incorrect dans sa requête originale. –

+0

cela ne comprends pas tout à fait. les bacs utilisant cette méthode sont nommés '0-1',' 50-49', etc. – wootscootinboogie

+0

J'ai fait une petite erreur. Réponse est plus simple (post édité) –