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 :

Requête qui duplique des lignes en fonction d'une valeur dans un champ [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut Requête qui duplique des lignes en fonction d'une valeur dans un champ
    Bonjour à tous,

    j'ai une table contenant les éléments suivants :

    Date N° Cde Ref Libellé Nb de palette
    25/01/2015 10 706 Article1 2
    20/01/2015 9 707 Article2 1

    Je voudrais sortir via un select le contenu de cette table en dupliquant chaque ligne autant de fois qu'il y'a de nombre de palette pour cette ligne.
    Du coup le résultat attendu devrait être comme ci-dessous :

    Date N° Cde Ref Libellé Nb de palette
    25/01/2015 10 706 Article1 2
    25/01/2015 10 706 Article1 2
    20/01/2015 9 707 Article2 1

    En faisant des recherches sur internet j'ai vu qu'il existait la possibilité de faire de la récursivité sur SQL.

    Je n'ai malheureusement pas encore réussi à résoudre ce problème.

    Est ce réalisable via SQL ?

    D'avance merci,
    Fred

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    C'est en effet réalisable en SQL, mais cela n'y aurait pas trop de sens.
    Pourquoi ne pas gérer cela dans le programme ? cela réduirait le volume de données, en plus de garder une requête plus simple et plus logique.

    Si toutefois vous tenez à la faire en SQL, même si une solution à base de requête récursive est envisageable, il serait plus simple de créer une table contenant simplement des nombres, et de faire une jointure sur cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ...
    FROM LaTable T
    INNER JOIN TableDesNombre N
        ON N.nb <= T.NbPalette

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    Je suis d'accord avec vous, l'intérêt peut paraitre limité.

    En fait j'ai besoin d'imprimer des étiquettes CAB depuis ces données.
    J'ai des compteurs sur mes étiquettes qui s'incrémentent automatiquement pour obtenir sur chaque étiquette 1/n, 2/n, ... n/n

    Au début du projet nous éditions les étiquettes par BL, donc la numérotation se faisait correctement.
    A présent nous éditions les étiquettes par tournées (plusieurs BL).
    Je passe par une fonction VBS dans ce logiciel, malheureusement j'ai découvert que le VBS n'est exécuté qu'au lancement de l'édition et pas entre chaque étiquette.
    Donc impossible d'obtenir un numérotage correct à présent.

    Je dois donc dupliquer mes lignes en amonts, via SQL de préférence.

    En résumé, je recule pour mieux sauter
    Je vais étudier votre proposition, merci !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    il serait plus simple de créer une table contenant simplement des nombres, et de faire une jointure sur cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ...
    FROM LaTable T
    INNER JOIN TableDesNombre N
        ON N.nb <= T.NbPalette
    Si je comprends bien ce serait de créer une table avec ? :
    1
    2
    2
    3
    3
    3
    4
    4
    4
    4
    etc...

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    non, simplement
    1
    2
    3
    4
    ...

    Du fait de la non équi jointure (<=), si NbPalette = 2, la jointure sera faite avec deux lignes (1 et 2) de cette table.

    Cerise sur le gâteau, la colonne de cette table de nombres pourra donc servir pour votre compteur.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 161
    Points : 77
    Points
    77
    Par défaut
    Impeccable merci !
    ça fonctionne au poil

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Fredo67 Voir le message
    Impeccable merci !
    ça fonctionne au poil
    On appelle cela table de comptage ou en Anglais tally table.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. insérer des lignes par rapport a une valeur dans la ligne au-dessus
    Par samihichem dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/05/2015, 09h08
  2. Réponses: 3
    Dernier message: 28/10/2014, 14h15
  3. Réponses: 3
    Dernier message: 29/11/2013, 18h24
  4. Masquer des slides en fonction d'une valeur dans excel
    Par hidozo dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 25/11/2013, 23h01
  5. [XL-2007] Extraire des lignes en fonction d'une valeur de cellule dans un autre fichier
    Par MisterTambo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/08/2009, 10h42

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