Problème d'affichage de totaux dans une requête

Résolu/Fermé
bouffon de service Messages postés 1 Date d'inscription mercredi 12 décembre 2012 Statut Membre Dernière intervention 13 décembre 2012 - 13 déc. 2012 à 10:13
 bouffon de service - 17 déc. 2012 à 09:34
Bonjour, à tous

Je travaille sous Oracle 10.
Pour l'essai de la requête, l'extraction se fait sur l'article 'Z5021' et sur 2 ans.
Je souhaite avoir la somme des qtés mouvementées (qt_stck_move) pour un type de mouvement (cd_mvt_type) type 'S1' par articles et par an pour l'ensemble du stock magasin.

Je sais que sur 2007 il n'y a eu aucune consommation. Pour 2008, il y a eu 2 pièces consommées.
- Si l'enlève le sous select portant sur l'année 20007, la requête m'affiche les données de 2008.
- Si je remets le sous select portant sur l'année 2007, la requête ne m'affiche plus rien.

select substr(A.cd_item,1, 11) ref_interne, substr(A.txt_quotefield,1, 60) libelle_article,
qt07, qt08
from
    (select cd_item, txt_quotefield
     from ITEM
     where bo_cancel_item = '0'
    )A,
   (select cd_item, substr(sum(qt_stck_move),1, 4) qt07
     from stock_mouvemt
     where dttm_stock_mvt between to_date('01012007','DDMMYYYY')
     and to_date('31122007','DDMMYYYY')
     and cd_mvt_type = 'S1'
     group by cd_item
    )F,
    (select cd_item, substr(sum(qt_stck_move),1, 4) qt08
     from stock_mouvemt
     where dttm_stock_mvt between to_date('01012008','DDMMYYYY')
     and to_date('31122008','DDMMYYYY')
     and cd_mvt_type = 'S1'
     group by cd_item
    )B
where A.cd_item = B.cd_item
and A.cd_item = F.cd_item
and A.cd_item = 'Z5021'


J'ai utilisé la fonction NVL. Mais c'est pareil.

- sum(NVL(qt_stck_move,0)) qt07
- NVL(sum(qt_stck_move),0) qt07

Est-ce la bonne fonction a utiliser ?? Je sèche un peu.

Merci pour votre aide.

2 réponses

jee pee Messages postés 39636 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 25 avril 2024 9 235
14 déc. 2012 à 21:07
Bonjour,

Il faut que tu cherches du coté de ce qu'on appelle les jointures externes, utilisées quand il n'existe pas de correspondance sur toutes les tables en jeu.


syntaxe :

and A.cd_item = F.cd_item(+)

tu peux même mettre, en plus, s'il n'y a pas de correspondance sur 2008

and A.cd_item = B.cd_item(+)

cdlt
1
bouffon de service
17 déc. 2012 à 09:32
Bonjour, Jee Pee

C'est le résultat que j'attendais.

Merci pour ton aide.

Cdlt,
0
bouffon de service
17 déc. 2012 à 09:34
Problème résolu. Merci
0