sommes multiple - SQL/NoSQL - Programmation
Marsh Posté le 13-04-2004 à 18:19:33
donne nous les requêtes !
et tu utilises quoi ? Oracle ? MySql ?
Les durées que tu devrais avoir dans ton exemple sont 18000 et 3000, c'est ça ?
Si tu peux, il ne faut pas faire de jointure directe entre table1 et table2 puisqu'apparemment il te faut les sommes des durées dans les 2 tables séparément ...
Donc qqch comme :
Code :
|
Marsh Posté le 13-04-2004 à 19:02:43
Je travaille avec Oracle. Les durées que je devrai avoir sont 6000 (j'ai oublié un - : 6000+6000-6000=6000) et 3000
Voici la requete :
select network_operator_id,last_day(traffic_date),product_id,sum(duration) Registred,sum(unit_count) Declared
from daily_summary,posted_account_entry
where network_operator_id=FEEDER_CUST_CODE
and PRODUCT_ID=PROD_LINE
and PRODUCT_ID='IDTF'
and CALL_DATE >= '01/05/2003'
and CALL_DATE <= '31/05/2003'
and last_day(call_date)=last_day(traffic_date)
and NETWORK_OPERATOR_ID = 'GBBT'
group by network_operator_id,last_day(traffic_date),product_id
;
Résultat :
NETWO LAST_DAY PROD REGISTRED DECLARED
----- -------- ---- ---------- ----------
GBBT 31/05/03 IDTF 6000 9000
Au lieu de
NETWO LAST_DAY PROD REGISTRED DECLARED
----- -------- ---- ---------- ----------
GBBT 31/05/03 IDTF 6000 3000
Je vais essaier d'enlever les jointures.
Marsh Posté le 14-04-2004 à 11:00:00
tu peux essayer d'utiliser la requête que je t'ai mise au-dessus, avec les bons noms de champs, et me dire ce que ça donne ?
L'idée est de faire les sommes indépendamment pour les 2 tables, et ensuite, de joindre les 2 sommes par rapport aux clés
Le plus simple pour écrire ce genre de requêtes est de les écrire séparément (tu écris d'abord la requête qui utilise seulement la table 1, puis celle de la table 2) et des les grouper ensuite. Surtout que tu utilises Oracle, qui permet l'utilisation de requêtes imbriquées (pas comme mySql, sur lequel je galère un peu car j'ai utilisé qu'Oracle jusqu'à maintenant ! )
Marsh Posté le 14-04-2004 à 13:27:38
En fait, la base de données est une bd Oracle, mais j'utilise BusinessObjects pour créer un rapport . Donc, je vais voir si ta requête est faisable en BO ou sous Designer.
Sous SQL*+, un message me dit que le group by n'est pas à la bonne place!!!
Marsh Posté le 14-04-2004 à 19:08:42
Bon, j'ai essayé ton truc :
SELECT result1.network_operator_id,result1.month,result1.product_id, result1.durée1, result2.durée2
FROM (SELECT network_operator_id,last_day(call_date) as month, product_id, sum(duration) as durée1
FROM daily_summary
GROUP BY network_operator_id, last_day(call_date), product_id) result1,
(SELECT feeder_cust_code,last_day(traffic_date) as month, prod_line, sum(unit_count) as durée2
FROM posted_account_entry
GROUP BY feeder_cust_code,last_day(traffic_date) , prod_line) result2
WHERE result1.network_operator_id = result2.feeder_cust_code
AND result1.month=result2.month
AND result1.product_id= result2.prod_line
AND result1.network_operator_id = 'GBBT'
AND result1.product_id= 'IDTF';
et ça marche admirablement merci énormément. Seulement voilà, je dois intégrer ça dans le Business Objects !!!
BOn, j'essaie et on verra bien.
Marsh Posté le 16-04-2004 à 11:18:48
Salut.
Je trouve toujours pas de solution pour faire une telle requête avec BO. Comment je dois faire????
Heeeeeeeeeelp!!!
Marsh Posté le 26-04-2004 à 18:06:45
t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: t1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable: :pt1cable:
Marsh Posté le 13-04-2004 à 14:22:07
Salut.
J'ai deux tables avec les champs suivant : opérateur,produit,mois et duré. Je veux afficher la somme des durées par opérateur, par produit et par mois.
Seulement voilà pour l'opérateur x, le produit y et le mois z, j'ai trois lignes dans la première table et une seule dans la seconde. La requete me retourne la somme des durées des trois lignes de la table 1 (c'est ok!) mais 3*durée de la ligne de la table 2 !!!
OPÉRATEUR MOIS PRODUIT DURÉE
--------- -------- ------- ----------
GBBT 31/05/03 IDTF 6000
GBBT 31/05/03 IDTF 6000
GBBT 31/05/03 IDTF 6000
*
table 2 :
OPÉRA MOIS PRODU DURÉE
----- -------- ----- ----------
GBBT 31/05/03 IDTF 3000 <---------------------|
|
la requete retourne : |
|
OPÉRATEUR MOIS PRODUIT DURÉE 1 DURÉE 2 |
--------- -------- ------- ------- ------- |
GBBT 31/05/03 IDTF 6000 9000 <----------|
Comment faire pour ne pas re sommer une ligne déjà parcourue?
Merci, à +.