Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 22h43   #1
Invité de passage
 
Stéphane
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Stéphane

Informations forums :
Inscription : janvier 2011
Messages : 1
Points : 0
Points : 0
Par défaut SQL 2 - compter des sous-rubriques distinctes d'une table

Bonsoir,

Je me permets de solliciter votre bienveillance pour calculer le nombre de valeurs distinctes à partir de deux tables jointes.

1°/ La structure des tables est fournie en pièce jointe.

2°/ En fait, je dispose de deux tables jointes selon deux agrégats.
Je cherche à compter le nombre d'occurence distincte de trois champs désignés sous les termes OPERATING_UNIT, FUND_CODE, DEPTID.
Au champ FUND_CODE est associé plusieurs types possibles par l'intermédiaire du champ S1_TYP_FUND_CODE (la liste possible est : SUP, OFF, etc...).

3°/ L'objectif est de trouver le résultat suivant :
YEAR CODE_BU_GL CODE_DIVISION LIBELLE_DIVISION NB_DIVISION NB_RG NB_RG_OFF NB_DPT

Normalement, le nombre de RG (dont le total est NB_RG) doit se décomposer en la somme des variables NB_RG_OFF, etc... mais cela ne fonctionne pas car je dois faire une erreur de programmation.

J'ai consulté le forum et constaté qu'il est recommandé d'utiliser la fonctionnalité CASE OF mais je n'arrive pas à conceptualiser la notion de sous-requête pour décomposer le total de champs distincts en sous-totaux.

4°/ Ci-dessous, la requête que j'ai programmée (je n'ai pas indiqué toute la liste des sous-totaux que je recherche par simplification). Elle fonctionne sans le calcul des sous-totaux cependant :
Citation:
SELECTA.FISCAL_YEAR AS YEAR,
A.BUSINESS_UNIT AS CODE_BU_GL, A.S1_BU_GL_LD AS LIBELLE_BU_GL
A.OPERATING_UNIT AS CODE_DIVISION, A.S1_OP_UNIT_LD AS LIBELLE_DIVISION,
COUNT(DISTINCT A.OPERATING_UNIT) AS NB_DIVISION,
COUNT(DISTINCT A.FUND_CODE) AS NB_RG,
(SELECT COUNT(DISTINCT A.FUND_CODE) FROM PS_S1_DHY_FUND A WHERE A.S1_TYP_FUND_CODE="SUP") AS NB_RG_OFF
COUNT(DISTINCT C.DEPTID) AS NB_DPT,
FROM C
LEFT join A on (A.FISCAL_YEAR=C.FISCAL_YEAR AND A.FUND_CODE=C.FUND_CODE)
GROUP BY A.FISCAL_YEAR, A.BUSINESS_UNIT, A.OPERATING_UNIT, A.S1_OP_UNIT_LD
5°/
L'erreur provient certainement de la ligne de programmation en "mauve".

Si vous pouviez m'aider, je tourne en "rond" malheureusement.

Je vous serai reconnaissant de votre aide, grâce aux FAQ, je vois bien que l'orientation serait l'utilisation d'un CASE... mais je sèche.

En vous remerciant encore, Stéphane.
Fichiers attachés
Type de fichier : xls tables.xls (20,5 Ko, 2 affichages)
step2222 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 23h01   #2
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Je n'ai pas regardé en détail ton problème, ni ta description de probleme (mon lit m'appelle).
J'ai vu quelques bricoles
A/Dans la ligne en mauve il y a des quotes qui ne sont pas droites ’ et pas ', erreur de copier coller ou vrai erreur?
B/Dans la fameuse ligne il n'y a rien qui la lie à la ligne courante, est-ce normal, elle sera la même pour toutes les lignes
C/Tu as utilisé une jointure externe, attention cela peut engendrer des bizarrerie avec les fonctions d'agregation.


A+
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h03   #3
Membre émérite
 
Inscription : août 2008
Messages : 835
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 835
Points : 823
Points : 823
Bonjour,

Essayez en remplaçant votre ligne mauve par :
Code :
COUNT(DISTINCT CASE WHEN A.S1_TYP_FUND_CODE='SUP' THEN A.FUND_CODE END) AS NB_RG_OFF,
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h08.


 
 
 
 
Partenaires

Hébergement Web