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

Développement SQL Server Discussion :

regroupement sous conditions


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut regroupement sous conditions
    Bonjour,

    J'ai besoin du résultat suivant :

    N° Commande|N° Article|Nb. 1/2|Nb. 1/4|Nb. 1/8|Nb. VRAC

    Avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT sl.[Document No_] as Commande, 
    sl.No_ as [No Article],
    spd.[Logistic Type] as [Cond.],
    spd.[packaging quantity] as [Nb]
    FROM  [Sales Line] sl WITH (ROWLOCK)
    JOIN [Sales Packaging Detail] spd ON spd.[Document No_] = sl.[Document No_] AND  spd.[Item No_] = sl.No_
    WHERE sl.[Consumption date]= @dateConso
    AND sl.No_ = @article
    AND sl.[Responsibility Center] = @paramcuisine
    ORDER BY Commande
    J'obtiens le résultat suivant, dans des délais satisfaisants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    CV795245	PF016557	1/8	2
    CV795977	PF016557	1/8	4
    CV795977	PF016557	VRAC	15
    ...
    Dans ce jeu de résultat, les conditionnements (1/2,1/4...) sont sur des lignes différentes. J'ai besoin de les avoir sur la même ligne.


    J'ai essayé 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    SELECT sl.[Document No_] as [No Commande], 
    sl.No_ as [No Article],
     
    (SELECT quantity FROM [Restoria$Sales Packaging Detail] spd1
    WHERE spd1.[Document No_] = sl.[Document No_] 
    AND  spd1.[Line No_] = sl.[Line No_]
    AND [Logistic Type] = '1/2') AS [Nb 1/2],
     
    (SELECT quantity FROM [Restoria$Sales Packaging Detail] spd2
    WHERE spd2.[Document No_] = sl.[Document No_] 
    AND  spd2.[Line No_] = sl.[Line No_]
    AND spd2.[Logistic Type] = '1/4') AS [Nb 1/4],
     
    (SELECT quantity FROM [Restoria$Sales Packaging Detail] spd3
    WHERE spd3.[Document No_] = sl.[Document No_] 
    AND  spd3.[Line No_] = sl.[Line No_]
    AND  spd3.[Logistic Type] = '1/8') AS [Nb 1/8],
     
    (SELECT quantity FROM [Restoria$Sales Packaging Detail] spd4
    WHERE spd4.[Document No_] = sl.[Document No_] 
    AND  spd4.[Line No_] = sl.[Line No_]
    AND spd4.[Logistic Type] = 'VRAC') AS [Nb VRAC]
     
    FROM  [Sales Line] sl WITH (ROWLOCK)
    [Document No_] AND  spd.[Item No_] = sl.No_
    WHERE sl.[Consumption date]= @dateConso
    AND sl.No_ = @article
    AND sl.[Responsibility Center] = @paramcuisine
    ORDER BY [No Commande]
    Les résultats mettent 4 min a s'afficher (contre 2 sec pour la requête précédente).
    J'ai également essayé de mettre mes [Sales packaging detail] dans une table temporaire (WITH tableTemp as...) sans succès.

    Auriez-vous des pistes ? pour regrouper des lignes selon la valeur d'une colonne ?

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Vous pouvez utiliser PIVOT ou des sommes conditionnées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    [Document No_]
    , [No_ ]
    , SUM(CASE WHEN [Logistic Type] = '1/2' THEN Quanity ELSE 0 END) AS [1/2]
    , SUM(CASE WHEN [Logistic Type] = '1/4' THEN Quanity ELSE 0 END) AS [1/4]
    ...
     
    GROUP BY [Document No_], [No_ ]

  3. #3
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut
    Merci,

    C'est effectivement les sommes conditionnées que j'ai choisi. Je ne connais pas encore PIVOT, je pense approfondir pour mes rapports SSRS.

    Avec seulement les somme conditionnées je passe de 4 min à 1 min, pour améliorer encore, je passe par une table temporaire pour lui ajouter des index, c'est déconseillé mais je ne vois pas d'autre solution.
    Le résultat s'affiche en 2/3 secondes.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    CREATE TABLE #temp
    (
    Commande varchar(20),
    [No Article] varchar(20) ,
    [Cond.] varchar(10),
    [Q] decimal (38,20)
    )
     
    CREATE UNIQUE CLUSTERED INDEX IX_1 on #temp (Commande,  [No Article],Article,[Cond.] )
     
     
    insert into #temp (Commande,
    [No Article],
    [Cond.],
    [Q])
     
    SELECT sl.[Document No_] as Commande,
    sl.No_ as [No Article],
    spd.[logistic type] as [Cond.],
    spd.[quantity] as [Q]
     
    FROM  [Sales Line] sl WITH (ROWLOCK)
    JOIN [Sales Packaging Detail] spd ON spd.[Document No_] = sl.[Document No_] AND  spd.[Item No_] = sl.No_
    WHERE sl.[Consumption date]= @dateConso
    AND sl.No_ = @article
    AND sl.[Responsibility Center] = @paramcuisine
     
     
    SELECT Commande,
    [No Article],
    SUM(CASE  WHEN [Cond.] = '1/2' THEN [Q] ELSE 0 END) as [Parts 1/2],
    SUM(CASE  WHEN [Cond.] = '1/2' THEN [Barquettes] ELSE 0 END) as [1/2],
    SUM(CASE  WHEN [Cond.] = '1/4' THEN [Q] ELSE 0 END) as [Parts 1/4],
    SUM(CASE  WHEN [Cond.] = '1/4' THEN [Barquettes] ELSE 0 END) as [1/4],
    SUM(CASE  WHEN [Cond.]= '1/8' THEN [Q] ELSE 0 END) as [Parts 1/8],
    SUM(CASE  WHEN [Cond.] = '1/8' THEN [Barquettes] ELSE 0 END) as [1/8],
    SUM(CASE  WHEN [Cond.] = 'VRAC' THEN [Q] ELSE 0 END) as [Parts VRAC],
    SUM(CASE  WHEN [Cond.] = 'VRAC' THEN [Barquettes] ELSE 0 END) as VRAC
    FROM #temp WITH (READUNCOMMITTED)
    GROUP BY 
    Commande,
    [No Article],
    Article
     
    drop table #temp

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Pourquoi ne créez vous pas directement l'index sur la table ?

  5. #5
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut
    Sur [sales packaging detail].[logistic type] ?

    Il appartient déjà à la clef de la table, mais je n'ai pas essayé de l'indexer seul ...

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

Discussions similaires

  1. [VBA-E]feuille créée sous condition
    Par Angel79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2006, 15h11
  2. Afficher un champ sous condition
    Par Cantalou dans le forum Access
    Réponses: 24
    Dernier message: 01/02/2006, 14h25
  3. Réponses: 8
    Dernier message: 14/01/2006, 15h17
  4. Pb Ouverture de formulaire sous condition.
    Par Phl98 dans le forum Access
    Réponses: 8
    Dernier message: 03/11/2005, 22h28
  5. Create function sous condition
    Par nbl dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 12h00

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