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 :

TABLE transformée en tcd


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 18
    Points : 15
    Points
    15
    Par défaut TABLE transformée en tcd
    Bonjour et merci d'avance !

    J'ai cette table :
    Nom : Capture1.PNG
Affichages : 81
Taille : 10,7 Ko


    que je voudrais transformer en çà :

    Nom : Capture2.PNG
Affichages : 67
Taille : 5,1 Ko


    j'ai essayé ceci mais je suis un peu dépassé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT Données.IECSL/10000 as COUT,   
      [A1], [A2], [B1], [B3], [C1], [C2], [D1]  
    FROM  
    (
    select IELITM, IECOST, IECSL/10000 as COUT
                    FROM PRODDTA.F30026                
     where IEMMCU LIKE '%02040' and IELEDG='07' and (IELITM = '500375'or IELITM = '509553')
    ) AS Données 
    PIVOT  
    (  
      AVG(Données.IELITM)  
      FOR Données.IECOST IN ([A1], [A2], [B1], [B3], [C1], [C2], [D1])  
    ) AS PivotTable;
    Pouvez-vous svp m'aider ?

    Pour info je n'ai pris que 2 articles mais il y en a des milliers...

    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
    Bonjour,

    Je n'ai pas l'habitude des PIVOT, alors je le fais en GROUP BY

    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
    26
    27
    28
    WITH T AS (SELECT 500375 ielitm, 'A1' iecost, 0.2057 cout FROM dual
    UNION SELECT 509553 ielitm, 'A1' iecost, 23.1253 cout FROM dual
    UNION SELECT 509553 ielitm, 'A2' iecost, 0.0048 cout FROM dual
    UNION SELECT 509553 ielitm, 'B1' iecost, 44.6071 cout FROM dual
    UNION SELECT 500375 ielitm, 'B1' iecost, 2.2367 cout FROM dual
    UNION SELECT 500375 ielitm, 'B3' iecost, 1.1209 cout FROM dual
    UNION SELECT 509553 ielitm, 'B3' iecost, 19.3165 cout FROM dual
    UNION SELECT 509553 ielitm, 'C1' iecost, 20.9414 cout FROM dual
    UNION SELECT 500375 ielitm, 'C1' iecost, 1.6429 cout FROM dual
    UNION SELECT 509553 ielitm, 'C2' iecost, 38.0312 cout FROM dual
    UNION SELECT 500375 ielitm, 'C2' iecost, 2.2504 cout FROM dual
    UNION SELECT 509553 ielitm, 'D1' iecost, 650.2914 cout FROM dual)
    SELECT ielitm, 
    		MAX(CASE WHEN iecost = 'A1' THEN cout END) AS A1,
    		MAX(CASE WHEN iecost = 'A2' THEN cout END) AS A2,
    		MAX(CASE WHEN iecost = 'B1' THEN cout END) AS B1,
    		MAX(CASE WHEN iecost = 'B3' THEN cout END) AS B3,
    		MAX(CASE WHEN iecost = 'C1' THEN cout END) AS C1,
    		MAX(CASE WHEN iecost = 'C2' THEN cout END) AS C2,
    		MAX(CASE WHEN iecost = 'D1' THEN cout END) AS D1,
    		SUM(CASE WHEN iecost NOT IN ('A1', 'A2', 'B1', 'B3', 'C1', 'C2', 'D1') THEN cout END) AS Autres
    	FROM T
    	GROUP BY ielitm
     
     
    IELITM	A1	A2	B1	B3	C1	C2	D1	AUTRES
    500375	0.2057	null	2.2367	1.1209	1.6429	2.2504	null	null
    509553	23.1253	0.0048	44.6071	19.3165	20.9414	38.0312	650.2914	null
    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
    Technicien maintenance
    Inscrit en
    Novembre 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Bonjour McM,

    Merci pour ta réponse. Mais comment fais-tu lorsqu'il y a des milliers de ielitm ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    J'ai fini par trouver !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from
    (select IELITM, IECOST, IECSL/10000 as CT from PRODDTA.F30026                
     where IEMMCU LIKE '%02040' and IELEDG='07' and (IELITM = '500375'or IELITM = '509553')) 
    pivot(max(CT) for IECOST in ('A1', 'A2', 'B1', 'B3', 'C1', 'C2', 'D1'));

  5. #5
    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
    Citation Envoyé par Chree Voir le message
    Bonjour McM,

    Merci pour ta réponse. Mais comment fais-tu lorsqu'il y a des milliers de ielitm ?
    Ca ne change rien à la requête. La seule différence est le nombre de colonne défini directement dans le select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT ielitm, 
    		MAX(CASE WHEN iecost = 'A1' THEN cout END) AS A1,
    		MAX(CASE WHEN iecost = 'A2' THEN cout END) AS A2,
    		MAX(CASE WHEN iecost = 'B1' THEN cout END) AS B1,
    		MAX(CASE WHEN iecost = 'B3' THEN cout END) AS B3,
    		MAX(CASE WHEN iecost = 'C1' THEN cout END) AS C1,
    		MAX(CASE WHEN iecost = 'C2' THEN cout END) AS C2,
    		MAX(CASE WHEN iecost = 'D1' THEN cout END) AS D1,
    		SUM(CASE WHEN iecost NOT IN ('A1', 'A2', 'B1', 'B3', 'C1', 'C2', 'D1') THEN cout END) AS Autres
    	FROM Ta_table
    WHERE ....
    	GROUP BY ielitm
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/05/2018, 19h32
  2. Table transformé en tableau tableau
    Par asty69 dans le forum Macro
    Réponses: 37
    Dernier message: 13/05/2011, 15h53
  3. Excel 2002-2003 Transformer un TCD en valeur
    Par Mauna dans le forum Excel
    Réponses: 1
    Dernier message: 17/11/2009, 12h59
  4. [AC-2000] Comparer des tables et des tcd sur différents niveaux
    Par ls8ls8 dans le forum VBA Access
    Réponses: 0
    Dernier message: 19/05/2009, 20h35
  5. une table à transformer vers xml java
    Par hichcasa dans le forum Services Web
    Réponses: 4
    Dernier message: 30/11/2008, 12h31

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