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

Langage SQL Discussion :

Sous total en Sql


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Sous total en Sql
    bonjour à tous je me trouve bien embeter je voudrais faire une requete avec des sous totaux pour calcluer les quatité de chaque article present dans mon stock
    pour l'instant j'ai deux requetet qui me permette d'avoir les resultat que je veux .

    la premiere me permet d'avoir la quantité de chaque lot par article . (j'ai pleusiuer article qui ont chacun plusieur lots.
    Voici la requete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select T1.Itemcode , T1.ItemName, T2.frgnName,T1.BatchNum , T1.ExpDate , T1.Quantity 
    From OIBT T1
    inner Join OITM T2 on T1.itemcode = T2.itemcode
    where T2.U_Prop = 'GSK'
    AND T1.Quantity >= 1
    la deuxieme me permet d'avoir la quantité quie j'ai au total de chaque articles
    voici la deuxieme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select T1.itemcode ,T1.itemname ,T1.FrgnName, sum (T2.Onhand) 
    from OITW T2 , OITM T1
    where T1.itemcode = T2.itemcode
    and T1.U_Prop = 'GSK'
    and T2.OnHand >= 1
    group by T1.itemCode , T1.itemname, T1.FrgnName
    mon souhait serais de pouvoir n'avoir qu'une requete donc de pouvoir avoir un sous Total a chaque changement d'article mais en consevant les quantité de chaque lot .

    il me faudrais une ligne qui se rajoute dans mon resultas de la premiere requete avec la somme de T1.Qantity à chaque changement de T1.ItemCode

    est ce que cela est possible en SQL ? si oui un grand merci D'avance .

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Oui c'est possible en SQL... selon votre SGBD.
    Regardez du côté de ROLLUP.

  3. #3
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Si c'est juste pour un problème d'affichage, il y a une solution simple qui s'appliquera (quasiment) partout:

    Code sql : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    SELECT Itemcode ,
    ItemName ,
    frgnName ,
    BatchNum ,
    ExpDate ,
    Quantity
    FROM
    (SELECT T1.Itemcode Itemcode ,
    T1.ItemName ItemName ,
    T2.frgnName frgnName ,
    T1.BatchNum BatchNum ,
    T1.ExpDate ExpDate ,
    T1.Quantity Quantity
    FROM OIBT T1
    INNER JOIN OITM T2
    ON T1.itemcode = T2.itemcode
    WHERE T2.U_Prop = 'GSK'
    AND T1.Quantity >= 1
     
    UNION
     
    SELECT T1.itemcode itemcode,
    T1.ItemName itemName,
    T1.FrgName FrgName ,
    NULL BatchNum ,
    NULL ExpDate ,
    SUM(T2.Onhand) Quantity
    FROM OITW T2 ,
    OITM T1
    WHERE T1.itemcode = T2.itemcode
    AND T1.U_Prop = 'GSK'
    AND T2.OnHand >= 1
    GROUP BY T1.itemCode ,
    T1.itemname ,
    T1.FrgnName
    )
    ORDER BY ItemCode

    Bon courage
    juva

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut merci
    merci mais je dois etre null car je n'est reussi avec ta version juvamine par contre je me rapproche du but avec celle de Waldar
    j'ai tester cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select T1.Itemcode , T1.ItemName, T1.BatchNum , T1.ExpDate ,T1.Quantity
    From OIBT T1
    inner Join OITM T2 on T1.itemcode = T2.itemcode
    where T2.U_Prop = 'GSK'
    AND T1.Quantity >= 1
    Group BY T1.Itemcode , T1.ItemName, T1.BatchNum , T1.ExpDate ,T1.Quantity WITH rollup
    mais cela me multiplie mes lignes par resultats et la ligne de sous total est avec un resultats NULL . je vous est mis le fichier CSV des résultats en piece jointe je l'ai renomer en point xls pour pouvoir faire le transfert .

    en tous les cas un gros merci de votre aide .
    Fichiers attachés Fichiers attachés

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Vous y êtes presque, il vous manque l'aggrégat sur la quantité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.Itemcode , T1.ItemName, T1.BatchNum , T1.ExpDate, sum(coalesce(T1.Quantity, 0)) as Quantity
    FROM OIBT T1
    INNER JOIN OITM T2 ON T1.itemcode = T2.itemcode
    WHERE T2.U_Prop = 'GSK'
    AND T1.Quantity >= 1
    GROUP BY T1.Itemcode , T1.ItemName, T1.BatchNum , T1.ExpDate WITH rollup
    Vous pouvez utiliser la fonction grouping qui vaut 0 si c'est une ligne normale et 1 si c'est un sous total.

    Comme vous n'avez toujours pas précisé votre SGBD je vous laisse la charge de retrouver la bonne syntaxe !

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut autre teste
    j'ai aussi tester ceci .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CASE WHEN (GROUPING(T1.ItemCode)=1) THEN 'ALL'
          ELSE ISNULL (T1.ItemCode,0)
          END AS [T1.ItemCode], 
    	   CASE WHEN (GROUPING(T1.ItemName)=1) THEN 'ALL'
          ELSE ISNULL (T1.ItemName,0 )
          END AS [T1.ItemName], 
    		CASE WHEN (GROUPING(T1.Quantity)=1) THEN 'ALL'
          ELSE ISNULL (T1.Quantity,0 )
          END AS [T1.Quantity]
    FROM  OIBT T1 
    GROUP BY T1.Itemcode , T1.ItemName, T1.Quantity WITH ROLLUP
    et apres plien de modif j'arrive a ce message d'erreur
    "Msg 8114, Level 16, State 5, Line 1
    Error converting data type varchar to numeric."
    et la j'avoue que je ne sais pas comment convertir mon champ .

    merci

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut sa marche mais avec doublons
    merci waldar (je suis sur SQL server 2005) ta derniere solution fonctionne j'ai mon sous total sauf que j'ai a chaque fois un doublons de ligne .
    je met le resultat en piece jointe vous verrez sur l'article

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT 
     (T1.Itemcode) AS [N°article],
     (T1.ItemName) AS [Description], 
     (T1.BatchNum) AS [ N°de lot], 
     (T1.ExpDate)  AS [date expiration],
    sum (coalesce(T1.Quantity, 0)) AS Quantity
    FROM OIBT T1
    inner join OITM T2 on T1.Itemcode = T2.Itemcode
    where T1.Quantity >= 1
    GROUP BY T1.Itemcode , T1.ItemName, T1.BatchNum , T1.ExpDate WITH rollup
    un gros merci pour votre aide
    Fichiers attachés Fichiers attachés

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Rajoutez un having du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    having
       (grouping(T1.Itemcode) = 0
    and grouping(T1.ItemName) = 0
    and grouping(T1.BatchNum) = 0
    and grouping(T1.ExpDate)  = 0)
     or
       (grouping(T1.Itemcode) = 1
    and grouping(T1.ItemName) = 1
    and grouping(T1.BatchNum) = 1
    and grouping(T1.ExpDate)  = 1)
    Comme ça vous ne prendrez que le détail ou le sous-total complet.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut merci je cloture le sujet
    merci waldar cela fontionne j'ai bien mon resultat avec ce code

    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 
     (T1.Itemcode) AS [N°article],
     (T1.ItemName) AS [Description], 
     (T1.BatchNum) AS [ N°de lot], 
     (T1.ExpDate)  AS [date expiration],
    sum (coalesce(T1.Quantity, 0)) AS Quantity
    FROM OIBT T1
    inner join OITM T2 on T1.Itemcode = T2.Itemcode
    where T1.Quantity >= 1
    AND t2.U_prop = 'GSK'
    GROUP BY T1.Itemcode , T1.ItemName, T1.BatchNum , T1.ExpDate WITH rollup
    HAVING
     
    ( grouping(T1.ItemName) = 0
    AND grouping(T1.BatchNum) = 0
    AND grouping(T1.ExpDate)  = 0)
     OR
    ( grouping(T1.ItemName) = 1
    AND grouping(T1.BatchNum) = 1
    AND grouping(T1.ExpDate)  = 1)
    un gros merci de ta part c trop cool sa marche .

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

Discussions similaires

  1. Pbs avec plans de maintenance sous l'agent SQL
    Par sheira dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/09/2005, 06h16
  2. Equivalent de la fonction NVL sous oracle en SQL-server
    Par MorbidAngel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/09/2005, 10h50
  3. sous access en sql
    Par berrada dans le forum ASP
    Réponses: 5
    Dernier message: 02/08/2005, 16h49
  4. Pb de total et de sous total
    Par PAINCO dans le forum Access
    Réponses: 22
    Dernier message: 23/06/2005, 15h17
  5. [CR] Sous Total par page
    Par adrien_78 dans le forum SAP Crystal Reports
    Réponses: 16
    Dernier message: 19/01/2005, 12h29

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