Aide analyse compréhention rédaction requête SQL
Bonjour,
Je cherche de l'aide pour comprendre une requête SQL Oracle.
Mon objectif principal est d'avoir la somme par utilisateur (user_id) du nombre qui se trouve dans la colonne "nbr_units" avec les 2 leviers, valeur TRAN_TYPE 100 et 600.
La requête que je joins sort des valeurs trop élevées en comparaison de la réalité, du coup je dois comprendre et voir ou cela déconne.
Pouvez-vous m'aider à résoudre ce problème
TRAN_TYPE = VARCHAR2 (3 CHAR)
TRAN_NBR = NUMBER (9, 0)
NBR_UNITS = NUMBER (13, 5)
S'ajoute à ce problème que je n'obtiens pas de résulta quand dans mon SELECT * FROM PROD_TRKG_TRAN WHERE TRAN_TYPE = 100 AND TRAN_TYPE = 600. Mais je le fais séparément j'obtiens des données ! Il doit y avoir une subtilité que je ne connais pas.
Première question : Je comprend pas pourquoi l'utilisation d'un "LEFT JOIN". Si je suis bien renseigné, cela permet de retourner le nombre de caractère.
Deuxième question : Le SUM(CASE WHENE ...) il compare la valeur qui est un ID unique. Comment il obtient la somme de "NBR_UNITS" par TRAN_TYPE pour l'utilisateur XX
Code:
1 2 3 4 5 6 7
|
select ptt.user_id as "OPERATEUR", '1 - Pièces Recues' as "ETAPE",
sum(case when ptt2.tran_nbr is not null then ptt2.nbr_units else ptt.nbr_units end) as "Nbr"
from prod_trkg_tran ptt
left join (select * from prod_trkg_tran ptt2 where tran_type =600 and trunc(create_date_time) = trunc(sysdate)) ptt2 on ptt2.cntr_nbr = ptt.cntr_nbr and rownum = 1
where ptt.tran_type =100 and trunc(ptt.create_date_time) = trunc(sysdate)
group by ptt.user_id |