Domanda

Hey guys, Così ho questo rapporto che sto raggruppandoli in diversi secchi d'età. Voglio che il conteggio di un secchio di età per essere zero se non ci sono righe associate con questo secchio età. Così ho fatto un outer join nel mio database selezionare e che funziona bene. Tuttavia, ho bisogno di aggiungere un gruppo in base a un'altra colonna nel mio database.

Quando si aggiunge a questo gruppo, i agebuckets che hanno avuto alcuna riga ad essi associati scompaiono. Ho pensato che potrebbe essere perché la colonna che stavo cercando di gruppo da era nullo per quella riga, così ho aggiunto un numero di riga al mio selezionare, e poi raggruppati per che (ho praticamente solo bisogno di gruppo per ogni fila e posso 't appena messo nei dettagli ... posso spiegare di più su questo, se necessario). Ma dopo aver aggiunto il numero di riga le agebuckets che non hanno i dati sono ancora nulli! Quando rimuovo questo gruppo che ho aggiunto ricevo tutti i secchi d'età.

Tutte le idee? Grazie !!

È stato utile?

Soluzione

E 'perché l'outer join per gruppi di età non è anche un outer join a qualsiasi vostro altro gruppo è -. si sono garantiti solo per avere uno di ogni fascia di età per set di dati, non uno di ogni fascia di età per [altro gruppo]

Quindi, se, per esempio, l'altro gruppo è Regione, è necessario un cartesiana / cross join dal vostro tavolo fascia di età ad un tavolo Regione (in modo da ottenere ogni possibile combinazione di fascia di età e regione), prima di esterna di entrare a il resto del set di dati.

Modifica - sulla base dei commenti, una query come la seguente dovrebbe funzionare:

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

(supponendo che è l'EVENT_DATE che deve essere raggruppate in secchi.)

Altri suggerimenti

ho avuto difficoltà a capire la tua domanda.

So che supporta il NULL Crystal Reports' è carente in qualche modo piuttosto fondamentali. Così io di solito cerco di non dipendono da esso.

Un modo per affrontare questo problema è quello di fasce di età hard-code nella query di database, per esempio:.

  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

In questo modo si è sicuri di ottenere gli zeri in cui si desidera zeri.

Mi rendo conto che questa non è una risposta diretta alla tua domanda. Buona fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top