J'exécute la requête suivante dans notre base de données et j'essaie d'obtenir la valeur de comptage comme 0 si aucun n'est présent, mais avoir des problèmes de le faire. Est-ce que quelqu'un pourrait aider à aider et à expliquer comment accomplir ce par exemple, ma requête renvoie actuellement quelque chose de retour comme celui-ci p> quand je vouloir qu'il retourne les valeurs vides et ressemble à ceci p>
3 Réponses :
Ceci imite ce que vous avez maintenant:
SQL> with voip_phone_number_pool (state, phone_number, status) as 2 (select 'AZ', 1234, 3 from dual union all 3 select 'AZ', 2232, 3 from dual union all 4 select 'AZ', 4444, 3 from dual union all 5 select 'AZ', 7756, 1 from dual union all 6 -- 7 select 'CA', 9999, 1 from dual 8 ), 9 states as 10 (select distinct state from voip_phone_number_pool) 11 select s.state, 12 count(v.phone_number) 13 from states s left join voip_phone_number_pool v on v.state = s.state 14 and v.status = 3 15 group by s.state 16 order by s.state; ST COUNT(V.PHONE_NUMBER) -- --------------------- AZ 3 CA 0 SQL>
Oui, je pense que je vais devoir faire cela, merci d'avoir aidé avec elle.
S'il n'y a pas de lignes dans la table des faits (VoIP_Phone_Number_pool) avec un état particulier, vous n'obtiendrez que de ne pas interroger ce tableau.
Vous devrez rejoindre votre table de fait dans une table de dimension (A Tableau avec tous les états possibles) afin d'obtenir les comptes désirés. p>
Par exemple, en supposant que vous disposez d'une telle table de dimension et qu'elle s'appelle "state_info": p>
Si la table des faits n'existe pas, créez-en une à l'aide d'une expression de table commune: avec State_Info comme (Sélectionnez «Al 'comme État de Dual Union Tous Sélectionnez« AK »comme État de Dual Union ...... Sélectionnez' Wy ' En tant que State de Dual) Sélectionnez S.State, Compter (V.Phone_Number) en tant que téléphone_number_count de State_info S Rejoindre externe VoIP_Phone_Number_Pool V sur S.State = V.State Group par S.State;
Merci, j'ai fini par créer une colonne dans l'une de nos tableaux pour suivre les états par et qui fonctionnait
SELECT s.state, COUNT(v.phone_number) AS phone_number_count FROM CORP_ACCT s LEFT OUTER JOIN voip_phone_number_pool v ON s.state = v.state GROUP BY s.state; worked for me
Y a-t-il une autre table qui possède tous les valeurs de l'état code> valides code> que vous souhaitez apparaître dans votre résultat?
Malheureusement, cela n'est pas limité à cette table. J'ai fait des recherches avant de poster et je sais que je pourrais faire cela avec une jointure à gauche si c'était. Je suis une sorte de creuser comment je peux le faire sans cela.
Comment savez-vous quels code> valeurs code> que vous souhaitez apparaître dans le résultat final, alors? Si
voip_phone_number_pool code> a toutes les valeurs d'état, juste pas avec
Status = 3 code>, vous pouvez faire l'auto-join que @Littlefoot suggère. Mais cela va être très coûteux en supposant qu'il s'agisse d'une table raisonnable.
Il n'y a pas une chose comme un déjeuner gratuit, @Justin :)
@Littlefoot - Totalement accepté. À moins que les volumes de données soient vraiment bizarres, je préférerais tout cependant créer une nouvelle table code> d'état code> pour que vous souhaitiez les lignes souhaitées. En particulier si la grande table de fait comporte des problèmes de qualité des données (j'ai vu de nombreux systèmes ayant des données pour 70 ou 80 des 50 États américains :-))
Je suis d'accord, @justin. Le modèle de données semble être faux i>; Au moins, la table
voip_phone_number_pool code> n'est pas normalisée. Comme vous l'avez dit,
Etat code> doit être un tableau séparé, référencé à partir du
VoIP _... / code>. Oh bien, ma requête n'était qu'un exemple de la façon de "résoudre" ce problème.