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 :

Grouper et calculer


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut Grouper et calculer
    Bonjour a tous

    j'ai un doute de si je peux realiser une action par SQL pur, ou si je dois aller vers PL/SQL.

    je vous donne les infos:

    soit une table avec des produits, un même produit sortira 30 fois car une fois par jour pour un mois de 30 jours. Dans chaque ligne PRODUIT/JOUR, il y a un stock, le stock varie chaque jour... Ce que je voudrais c'est avoir une sorte de tableau du genre absis et ordonné. A gauche le produit et ensuite une colonne par jour du mois avec le stock du jour.
    Illustration avec les données:

    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
    TIPO ACCION MODELO   TALLA COLOR PESO_BRUTO                             STK_MINIMO                             STK_IDEAL                              STK_REAL                               FECHA               BLOQUE ALMACEN  EAN13         FECHA_CARGA        
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 08/05/2013 7:21:56 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 14/05/2013 7:22:28 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 19/05/2013 4:12:55 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 20/05/2013 7:23:57 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 10/05/2013 7:22:42 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 13/05/2013 7:22:16 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 17/05/2013 7:24:17 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 23/05/2013 7:23:11 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 11/05/2013 4:14:29 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 15/05/2013 7:21:18 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 18/05/2013 4:14:41 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 09/05/2013 7:21:44 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 16/05/2013 4:12:02 
    D    B      51000355 18    10    1080                                   1                                      12                                     0                                                          52     052      8432527345753 05/05/2013 4:16:45
    je voudrais que le resultat sorte comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    8432527345753 01 02 03 04 05 06 .... 30
                            3   7  9  2   5  9        1
    C'est possible?
    D'avance merci

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Oui, c'est possible en SQL, mais ça ressemble à de la cosmétique... http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

    Dans un premier temps un simple SUM avec un GROUP BY Date et Produit devrait ramener un résultat de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date                 Produit                 Stock
    Date1                 Produit1                 Stock1
    Date1                 Produit2                 Stock2
    Date2                 Produit3                 Stock3
    Cordialement,

    Arkhena

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ca a l’air d’une requête classique de type pivot (cherchez des exemples sur ce forum). Par contre il me semble que vos données ne collent pas avec vos résultats.

    PS. Je ne partage pas l'opinion cité en lien par Arkhena

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Bonjour

    t'es pas d'accord avec ... l'histoire de la cosmetique?

    je vais chercher vers PIVOT
    Merci

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Bonjour a tous

    Pivot...

    J'essaye comme ceci:

    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
    WITH 
       T 
    AS 
    (
        SELECT
          MODELO||TALLA||COLOR,
          FECHA_CARGA,
          STK_REAL
       FROM mngdes2.MNG_ARTICULOS_CONTROL
    )
    SELECT 
       * 
    FROM 
       T
    PIVOT 
    (
       SUM(MAX(STK_REAL)-NIM(STK_REAL)) 
       FOR 
          (FECHA_CARGA)
    	IN
    	   (TO_CHAR(FECHA_CARGA,'DD'),'01')
    );
    A part l'erreur que ça me donne, je vudrais être sur de comprendre.
    Ce que je voudrais au final c'est la diference de stock pour un jour donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PIVOT 
    (
       SUM(MAX(STK_REAL)-MIN(STK_REAL))
    Ce que je comprend pas bien c'est le FOR IN de la syntaxe.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    J'ai aussi essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT PRODUCTO,"01","02","03"
    FROM (    SELECT    MODELO||TALLA||COLOR as PRODUCTO,
    SUM(case when TO_CHAR(FECHA_CARGA,'YYYY-MM-DD')='2013-05-01' then STK_REAL else null end) as "01",
    SUM(case when TO_CHAR(FECHA_CARGA,'YYYY-MM-DD')='2013-05-02' then STK_REAL else null end) as "02",
    SUM(case when TO_CHAR(FECHA_CARGA,'YYYY-MM-DD')='2013-05-03' then STK_REAL else null end) as "03"
    FROM mngdes2.MNG_ARTICULOS_CONTROL
    where MODELO LIKE '81%'
    GROUP BY MODELO,TALLA,COLOR);
    mais dans les colonnes 01, 02 et 03 y'a pas de donnée, il devrait y avoir le STOCK_REAL.
    Quelqu'un a une idée, je continue de chercher

Discussions similaires

  1. Grouper des champs calculés
    Par unrealou dans le forum BIRT
    Réponses: 2
    Dernier message: 01/07/2011, 18h20
  2. Grouper les contrôles sur une feuille de calcul
    Par stos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/09/2007, 15h11
  3. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09

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