Question

Hé les gars, J'ai donc ce rapport que je groupe en différentes tranches d'âge. Je veux que le comte d'un seau d'âge à zéro s'il n'y a pas de lignes associées à ce seau d'âge. Donc, je l'ai fait une jointure externe dans ma base de données, sélectionnez et qui fonctionne bien. Cependant, je dois ajouter un groupe basé sur une autre colonne dans ma base de données.

Quand j'ajoute ce groupe, les agebuckets qui avaient aucune ligne qui leur sont associées dissapear. Je pensais que cela aurait pu être parce que la colonne que je tentais de groupe en était nulle pour cette ligne, alors j'ai ajouté un numéro de ligne à mon sélectionner, puis regroupés par là (je fondamentalement juste besoin de groupe par chaque ligne et je peux « t il suffit de mettre dans les détails ... Je peux expliquer plus à ce sujet si nécessaire). Mais après avoir ajouté le numéro de ligne les agebuckets qui ne disposent pas de données sont toujours nulles! Lorsque je retire ce groupe que j'ajouté je reçois tous les seaux d'âge.

Toutes les idées? Merci !!

Était-ce utile?

La solution

Il est parce que la jointure externe au groupe d'âge n'est pas aussi une jointure externe à tout ce que l'autre groupe -. vous ne la garantie d'avoir un de chaque groupe d'âge par ensemble de données, pas un de chaque groupe d'âge par [autre groupe]

Donc, si, par exemple, votre autre groupe est Région, vous avez besoin d'un cartésien / jointure croisée de votre table de tranche d'âge à une table de la région (de sorte que vous obtenez toutes les combinaisons possibles de tranche d'âge et région), avant de rejoindre extérieur pour le reste de votre ensemble de données.

EDIT - sur la base des commentaires, une requête comme suit devrait fonctionner:

select date_helper.date_description, c.case_number, e.event_number
from 
(select 0 range_start, 11 range_end, '0-10 days' date_description from dual union
 select 11, 21, '11-20 days' from dual union  
 select 21, 31, '21-30 days' from dual union  
 select 31, 99999, '31+ days' from dual) date_helper
cross join case_table c
left outer join event_table e
on e.event_date <= date_helper.range_start*-1 + sysdate 
and e.event_date > date_helper.range_end*-1 + sysdate
and c.case_number = e.case_number

(en supposant que c'est le EVENT_DATE qui doit être regroupés dans des seaux.)

Autres conseils

J'ai eu du mal à comprendre votre question.

Je ne sais que le soutien NULL de Crystal Reports fait défaut à certains égards, assez fondamentaux. Donc, j'essaie généralement de ne pas en dépendent.

Une façon d'aborder ce problème est de tranches d'âge dur code dans la requête de base de données, par exemple:.

  SELECT p.person_type
         , SUM(CASE WHEN 
               p.age <= 2 
               THEN 1 ELSE 0 END) AS "0-2"
         , SUM(CASE WHEN 
               p.age BETWEEN 2 AND 18 
               THEN 1 ELSE 0 END) AS "3-17"
         , SUM(CASE WHEN 
               p.age >= 18 
               THEN 1 ELSE 0 END) AS "18_and_over"
    FROM person p
GROUP BY p.person_type

De cette façon, vous êtes sûr d'obtenir des zéros où vous voulez des zéros.

Je me rends compte que ce n'est pas une réponse directe à votre question. Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top