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

SQL Oracle Discussion :

Alias avec UNPIVOT ? [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Alias avec UNPIVOT ?
    bonjour,

    j'ai une requête avec un UNPIVOT avec une jointure qui me permet de restituer les quantités par taille et code barre de bon de commande qui se présente comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    select
    num_cde, 
    code_article,
    quantité_taille1,
    quantité_taille2,
    quantité_taille3,
    code_barre_article,
    code_couleur,
    source,
    val
    from table_des_commandes  UNPIVOT EXCLUDE NULLS
     ( VAL FOR ( SOURCE ) IN  
     ( 
            quantité_taille1 as '1',
            quantité_taille2 as '2',
            quantité_taille3 as '3'
      )        
    ) 
    LEFT OUTER JOIN table_des_code_barres USING( code_article,code_couleur )
     where source = NUMERO_TAILLE

    cela fonctionne mais j’aimerais filtrer avec le champs « date_de_creation » de la table_des_commandes mais ce champ existe aussi sous le même nom dans la table_des_code_barres.
    Donc j’ai des erreurs : "column ambiguously defined et cela me fait des erreurs en intégrant des alias.

    Auriez vous une idée de comment contourner le problème ?

    Merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Est-ce que tu peux nous donner la structure des tables et un jeu de test ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Au fait le but de la requête est d'avoir les quantités des articles commandés par code barre et de pouvoir filtré la table commande via date de création

    Voici la structure de ma table commande :

    Num_cde code_article code_couleur quantité_taille1 quantité_taille2 quantité_taille3 date_de_creation
    1001 art_a 100 10 0 30 10/02/2018
    1002 art_b 200 0 50 10 20/02/2018
    1003 art_c 300 2 10 0 02/03/2018
    1004 art_d 400 50 11 0 10/03/2018


    et ma table de code barre :

    Code_article code_couleur numero_taille code_barre date_de_creation
    art_a 100 1 3663254567895 05/01/2018
    art_a 100 2 3663254567896 05/01/2018
    art_a 100 3 3663254567897 05/01/2018
    art_b 200 1 3663254567898 05/01/2018
    art_b 200 2 3663254567899 05/01/2018
    art_b 200 3 3663254567900 05/01/2018
    art_c 300 1 3663254567901 05/01/2018
    art_c 300 2 3663254567902 05/01/2018
    art_c 300 3 3663254567903 05/01/2018
    art_d 400 1 3663254567904 05/01/2018
    art_d 400 2 3663254567905 05/01/2018
    art_d 400 3 3663254567906 05/01/2018
    art_e 500 1 3663254567907 05/01/2018
    art_e 500 2 3663254567908 05/01/2018
    art_e 500 3 3663254567909 05/01/2018



    Merci pour votre aide.

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Voici une requête :

    Pour info : Le unpivot va te supprimer les colonnes quantité_tailleX pour les mettre dans 2 colonnes (le X que tu as nommé SOURCE correspondant à la taille et la quantité dans la colonne VAL) sur plusieurs lignes.

    J'ai modifié la jointure externe (et mis en commentaire 1 ligne de code barre pour que tu vois), et mis des alias.
    J'ai renommé quelques colonnes pour mes tests.
    J'ai mis un Select * pour que tu vois les colonnes générées par ton UNPIVOT, et une condition sur une commande.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT cde.*, cb.code_barre 
    FROM (SELECT 1001 num_cde, 'art_a' code_article, 100 code_couleur, 10 qte_t1,  0  qte_t2, 30 qte_t3, TO_DATE('10/02/2018', 'DD/MM/RRRR') date_de_creation FROM dual
      UNION ALL SELECT 1002 num_cde, 'art_b' code_article, 200 code_couleur, 0  qte_t1, 50  qte_t2, 10 qte_t3, TO_DATE('20/02/2018', 'DD/MM/RRRR') date_de_creation FROM dual
      UNION ALL SELECT 1003 num_cde, 'art_c' code_article, 300 code_couleur, 2  qte_t1, 10  qte_t2, 0  qte_t3, TO_DATE('02/03/2018', 'DD/MM/RRRR') date_de_creation FROM dual
      UNION ALL SELECT 1004 num_cde, 'art_d' code_article, 400 code_couleur, 50 qte_t1,  11 qte_t2,  0 qte_t3, TO_DATE('10/03/2018', 'DD/MM/RRRR') date_de_creation FROM dual)
        UNPIVOT EXCLUDE NULLS ( VAL FOR ( taille ) IN   ( qte_t1 AS 1, qte_t2 AS 2, qte_t3 AS 3)  ) cde
    LEFT OUTER JOIN (SELECT 'art_a' code_article, 100 code_couleur, 1 numero_taille, 3663254567895 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
         -- UNION ALL SELECT 'art_a' code_article, 100 code_couleur, 2 numero_taille, 3663254567896 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_a' code_article, 100 code_couleur, 3 numero_taille, 3663254567897 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_b' code_article, 200 code_couleur, 1 numero_taille, 3663254567898 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_b' code_article, 200 code_couleur, 2 numero_taille, 3663254567899 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_b' code_article, 200 code_couleur, 3 numero_taille, 3663254567900 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_c' code_article, 300 code_couleur, 1 numero_taille, 3663254567901 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_c' code_article, 300 code_couleur, 2 numero_taille, 3663254567902 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_c' code_article, 300 code_couleur, 3 numero_taille, 3663254567903 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_d' code_article, 400 code_couleur, 1 numero_taille, 3663254567904 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_d' code_article, 400 code_couleur, 2 numero_taille, 3663254567905 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_d' code_article, 400 code_couleur, 3 numero_taille, 3663254567906 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_e' code_article, 500 code_couleur, 1 numero_taille, 3663254567907 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_e' code_article, 500 code_couleur, 2 numero_taille, 3663254567908 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_e' code_article, 500 code_couleur, 3 numero_taille, 3663254567909 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual) cb
     ON cb.code_article = cde.code_article AND cb.code_couleur = cde.code_couleur AND cb.numero_taille = cde.taille
    WHERE cde.num_cde = 1001
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NUM_CDE	CODE_ARTICLE	CODE_COULEUR	DATE_DE_CREATION	TAILLE	VAL	CODE_BARRE
    1001	art_a		100		10/02/2018		1	10	3663254567895
    1001	art_a		100		10/02/2018		3	30	3663254567897
    1001	art_a		100		10/02/2018		2	0

    Code plus lisible (avec les WITH du début pour simuler des tables, et la jointure externe au format oracle), et la date de création du code barre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    WITH TABLE_DES_COMMANDES AS
    (		SELECT 1001 num_cde, 'art_a' code_article, 100 code_couleur, 10 qte_t1,  0  qte_t2, 30 qte_t3, TO_DATE('10/02/2018', 'DD/MM/RRRR') date_de_creation FROM dual
      UNION ALL SELECT 1002 num_cde, 'art_b' code_article, 200 code_couleur, 0  qte_t1, 50  qte_t2, 10 qte_t3, TO_DATE('20/02/2018', 'DD/MM/RRRR') date_de_creation FROM dual
      UNION ALL SELECT 1003 num_cde, 'art_c' code_article, 300 code_couleur, 2  qte_t1, 10  qte_t2, 0  qte_t3, TO_DATE('02/03/2018', 'DD/MM/RRRR') date_de_creation FROM dual
      UNION ALL SELECT 1004 num_cde, 'art_d' code_article, 400 code_couleur, 50 qte_t1,  11 qte_t2,  0 qte_t3, TO_DATE('10/03/2018', 'DD/MM/RRRR') date_de_creation FROM dual),
    TABLE_DES_CODESBARRE AS
    (SELECT 'art_a' code_article, 100 code_couleur, 1 numero_taille, 3663254567895 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
         -- UNION ALL SELECT 'art_a' code_article, 100 code_couleur, 2 numero_taille, 3663254567896 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_a' code_article, 100 code_couleur, 3 numero_taille, 3663254567897 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_b' code_article, 200 code_couleur, 1 numero_taille, 3663254567898 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_b' code_article, 200 code_couleur, 2 numero_taille, 3663254567899 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_b' code_article, 200 code_couleur, 3 numero_taille, 3663254567900 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_c' code_article, 300 code_couleur, 1 numero_taille, 3663254567901 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_c' code_article, 300 code_couleur, 2 numero_taille, 3663254567902 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_c' code_article, 300 code_couleur, 3 numero_taille, 3663254567903 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_d' code_article, 400 code_couleur, 1 numero_taille, 3663254567904 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_d' code_article, 400 code_couleur, 2 numero_taille, 3663254567905 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_d' code_article, 400 code_couleur, 3 numero_taille, 3663254567906 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_e' code_article, 500 code_couleur, 1 numero_taille, 3663254567907 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
          UNION ALL SELECT 'art_e' code_article, 500 code_couleur, 2 numero_taille, 3663254567908 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual
    	UNION ALL SELECT 'art_e' code_article, 500 code_couleur, 3 numero_taille, 3663254567909 code_barre, TO_DATE('05/01/2018', 'DD/MM/RRRR') date_de_creation FROM dual)
    SELECT cde.*, cb.code_barre, cb.date_de_creation AS date_crea_cb
    FROM TABLE_DES_COMMANDES UNPIVOT EXCLUDE NULLS (val FOR taille IN (qte_t1 AS 1, qte_t2 AS 2, qte_t3 AS 3) ) cde, TABLE_DES_CODESBARRE cb
    WHERE cb.code_article (+)= cde.code_article AND cb.code_couleur (+)= cde.code_couleur AND cb.numero_taille (+)= cde.taille
    AND cde.num_cde = 1001
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NUM_CDE	CODE_ARTICLE	CODE_COULEUR	DATE_DE_CREATION	TAILLE	VAL	CODE_BARRE	DATE_CREA_CB
    1001	art_a		100		10/02/2018		1	10	3663254567895	05/01/2018
    1001	art_a		100		10/02/2018		3	30	3663254567897	05/01/2018
    1001	art_a		100		10/02/2018		2	0
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Merci bcps MCM

    j'ai vais prendre le temps de comprendre, mais je ne suis pas sur de vraiment savoir qu'est ce une jointure externe Oracle , ton code fonctionne parfaitement et avec les alias c'est très lisible.

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Jointure externe (norme Ansi) : LEFT OUTER JOIN ou RIGHT OUTER JOIN
    Jointure externe (spécifique Oracle) : (+) dans les conditions where (mais il y a des limitations). Oracle accepte la norme ANSI
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Merci pour l'explication

    je clos la discussion @ bientot

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

Discussions similaires

  1. Alias avec argument avec bash
    Par Jack_serious dans le forum Linux
    Réponses: 2
    Dernier message: 03/06/2006, 21h24
  2. Créer un alias avec inno setup
    Par Furlaz dans le forum C++Builder
    Réponses: 10
    Dernier message: 31/05/2006, 14h25
  3. gérer les alias avec outlook
    Par Chico_Latino dans le forum Outlook
    Réponses: 3
    Dernier message: 02/02/2006, 17h40
  4. Utilisation d'alias avec Update
    Par Jacques - 06 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2006, 00h31
  5. Alias avec interbase
    Par pifou02 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/03/2004, 11h55

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