IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Designer Discussion :

Casse-tête sur compteurs [Vxi3]


Sujet :

Designer

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 60
    Points
    60
    Par défaut Casse-tête sur compteurs
    Bonjour à tous,

    je bloque sur la réalisation de compteur sur un univers en création :

    les tables :
    DOSSIER(numdos, numop1, numop2)
    OPERATION(numop, numdos, date1, date2, date3)

    Les numdos et numopX sont les clées primaire, secondaire selon la tables.
    Dans les faits : pour 1 dossier je peu avoir 0,1 ou 2 opérations. Les dates corresponde aux étapes a compter et pour 2 opérations d'un même dossiers les dates peuvent être différentes (on a convenu qu'il faut utiliser la plus récente pour mes compteurs)

    Mon travail : Créer des compteurs Nb dossier à l'etape1, 2 et 3 pouvant être affiché dans un même tableau...

    en testant plusieurs configurations de jointure (par numdos ou numopX), plusieurs methode de comptage(cout over, indiquateur nombre, etc) je n'arrive pas a créer des compteurs valides sur les dates par dossier.

    Ex : avec jointure par numdos :
    nb etape1 : count(distinct(dossier.numdos) over (partition by (operation.date1))
    cette exemple me retourne une erreur dans Desk quand j'intégre 2 compteurs
    nb etape1 : count(distinct(dossier.numdos)) WHERE operation.date1 IS NOT NULL
    cette fois les clause where s'ajoute et j'ai le même nombre dans chaque colonnes...

    la seul méthode que je n'ai pas encore testé c'est de réaliser une table dérivé via une grosse grosse recette SQL...

    quelqu'un peu m'aider sur ce casse tête? svp

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bonjour,

    Etant donné votre jointure, j'imagine que vous êtes sous Oracle.

    Donc, le mieux à faire je pense est de créer une jointure externe entre les tables DOSSIERS et OPERATIONS sur numdos et numop1 avec numop.

    Ensuite, refaire le même type de jointure entre DOSSIERS et un alias de la table OPERATIONS sur numdos et numop2 avec numop.

    Ensuite, dans l'objet j'utiliserais un decode() pour tester les différentes valeurs de date et ramener l'étape correspondante.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 60
    Points
    60
    Par défaut
    Merci,

    Je vais tester cette méthode de suite.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 60
    Points
    60
    Par défaut
    petite question au niveau des jointures :

    je doit réaliser une jointure complexe ou 2 jointures par table/alias d'opération?

  5. #5
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Personnellement je préfère mettre toutes les égalités dans une même jointure... Mais ça revient au même.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 60
    Points
    60
    Par défaut
    Alors, j'ai intégrer 2 jointures 'simple' juste avec numope. quand j’intègre les 2 clée, je ne peu pas faire de jointure externe.

    et pour mes compteurs j'ai utilisé un case plutot qu'un decode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CASE WHEN dossier.numope1 is null and dossier.numope1 is null THEN 0
    WHEN operation.date1 IS NOT NULL THEN 1
    WHEN operation_a.date1 IS NOT NULL THEN 1
    ELSE 0
    END
    je 'narivai pas a y integer le AND...

    Merci

  7. #7
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Juste pour info :

    Dans le cas d'un jointure à plusieurs égalités, on ne peut pas cocher la case "jointure externe" mais on peut le faire quand même en utilisant l'ancienne syntaxe. Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE1.CHAMP1 = TABLE2.CHAMP1(+) AND TABLE1.CHAMP2 = TABLE2.CHAMP2(+)
    Ensuite, le CASE est une bonne solution. Seul hic, on ne peut pas utiliser l'objet dans les conditions d'une requête, contrairement au decode() qui le permet.
    Par contre effectivement, il n'est pas possible de mettre plusieurs conditions dans un decode(). Mais on peut en général s'en sortir avec une imbrication de decode()

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 60
    Points
    60
    Par défaut
    ha...
    si je peu pas utiliser mon objet dans une condition je suis mal!
    Et imbriquer les decode() va bien m'aider dans ce cas la.

    mais du coup je vais devoir 'doublonner' mes autres tables (4 en tous) qui sont liée avec operation.

    PS : pour mes jointures je vais les laisser tel quel. Mes testes me trouve le même résultat avec 1 ou 2 égalités.

    Et encor merci.

  9. #9
    Membre expérimenté
    Avatar de bastoonet
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 011
    Points : 1 342
    Points
    1 342
    Par défaut
    Pour les jointures externe, je crois qu'il y a un moyen de contournement pour les jointures externes complexes (sur plusieurs colonnes ou avec @prompt), il faut

    - cocher 'jointure externe' en selectionnant juste une colonne de chaque table
    - ensuite coller ou taper le SQL de la jointure complexe, multi-colonne
    => il doit garder la case jointure externe cochée et la griser ;-)

    enfin ça marché chez moi en XIR2/DB2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction casse-tête sur une date
    Par clavier12AZQSWX dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/06/2009, 12h36
  2. Requête casse tête sur anniversaire
    Par fardon57 dans le forum SQL
    Réponses: 3
    Dernier message: 14/01/2009, 17h53
  3. Casse tête sur du friend avec de l'héritage
    Par Drannor dans le forum C++
    Réponses: 4
    Dernier message: 03/10/2007, 23h20
  4. casse-tête sur date/calendrier
    Par SheikYerbouti dans le forum SQL
    Réponses: 21
    Dernier message: 23/08/2007, 18h56
  5. casse-tête sur les adresses (classe C et A)
    Par HuZimA dans le forum Protocoles
    Réponses: 7
    Dernier message: 27/07/2006, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo