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 :

Besoin d'aide pour ecrire une Proc en SQL SERVER


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Admin SQL Server
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Admin SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut Besoin d'aide pour ecrire une Proc en SQL SERVER
    Soit ma table ci-contre : Nom : ma_table.JPG
Affichages : 222
Taille : 37,4 Ko
    (Les cases vides sont de valeur null)

    Quelle serait la requete à faire dans ma proc GetSousLignes() suivante pour qu’elle affiche le résultat ci-dessous svp ?

    EXEC GetSousLignes(reference=1, sous_reference=1)
    retourne:
    hello16
    hello17
    hello18
    hello19
    hello20
    hello21
    hello22

    EXEC GetSousLignes(reference=2, sous_reference=1)
    retourne:
    hello29
    hello30
    hello31

    Merci bcp !
    J.

  2. #2
    Invité
    Invité(e)
    Par défaut
    En gros, tu veux que l'on fasse tes devoirs parce que tu es trop fainéant pour chercher un peu, non ?
    Peux-tu commencer par nous montrer ce que tu as déjà fait, si tu as déjà fait quelque chose et là, on se fera un plaisir de t'aiguiller vers la bonne réponse.

  3. #3
    Candidat au Club
    Homme Profil pro
    Admin SQL Server
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Admin SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut
    Merci pour la réponse amicale

    Eh bien la seule chose que j'ai faite pour l'instant c'est de commencer à remplir à la main les cases null de cette façon:
    Nom : ma_table_simple.JPG
Affichages : 211
Taille : 46,2 Ko
    afin de simplifier la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div style="margin-left:40px">declare @ref int
    declare @sous_ref int
     
    select ligne_txt 
    from ma_table
    where reference=@ref
    and sous_reference=@sous_ref</div>

    Cependant en vrai, j'ai 10 000 références dans ma table et qui comporte des cases null (problématique de départ).
    Du coup c'est pourquoi j'ai besoin d'aide svp, étant débutant en SQL.

    Merci de votre compréhension.
    J.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dbjr81 Voir le message
    Du coup c'est pourquoi j'ai besoin d'aide svp, étant débutant en SQL.
    Je ne comprends pas bien, tu t'annonces « Admin SQL Server » et débutant en SQL ? Y a pas comme des paradoxes ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    C'est faisable en une seule requête :

    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
    CREATE PROCEDURE dbo.P_GetSousLignes @reference SMALLINT,
                                         @sous_reference SMALLINT
    AS
    SET NOCOUNT ON;
    WITH 
    R AS
    (-- obtention des niveaux de rupture de référence
    SELECT id, reference, 
           COALESCE(LEAD(id) OVER(ORDER BY reference) - 1,
                    (SELECT MAX(id) FROM "table ci-contre")) AS last_id
    FROM   "table ci-contre" 
    WHERE  reference IS NOT NULL
    ),
    RP AS
    (-- propagation des ruptures de référence
    SELECT T.id, R.reference, T.sous_reference
    FROM   "table ci-contre" AS T
           INNER JOIN R
                 ON T.id BETWEEN R.id AND R.last_id
    ),
    SR AS
    (-- obtention des niveaux de rupture de sous-référence
    SELECT id, reference, sous_reference, 
           COALESCE(LEAD(id) OVER(ORDER BY reference , sous_reference) - 1,
                    (SELECT MAX(id) FROM "table ci-contre")) AS last_id
    FROM   RP 
    WHERE  sous_reference IS NOT NULL
    )-- propagation des niveaux de rupture de sous-référence
    SELECT ligne_txt
    FROM   RP
           LEFT OUTER JOIN SR
                ON RP.id BETWEEN SR.id AND SR.last_id
           INNER JOIN "table ci-contre" AS T
                 ON T.id = RP.id
    WHERE  RP.reference = @reference
      AND  SR.sous_reference = @sous_reference;
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC dbo.P_GetSousLignes 1, 1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ligne_txt
    --------------------------------------------------
    hello16
    hello17
    hello18
    hello19
    hello20
    hello21
    hello22
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC dbo.P_GetSousLignes 2, 1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligne_txt
    --------------------------------------------------
    hello29
    hello30
    hello31
    Données de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE "table ci-contre"
    (id              INT, 
     ligne_txt       VARCHAR(50), 
     reference       SMALLINT, 
     sous_reference  SMALLINT);
    GO
    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
    INSERT INTO "table ci-contre"
    VALUES 
    (1,  'hello15', 1,    NULL),
    (2,  'hello16', NULL, 1),
    (3,  'hello17', NULL, NULL),
    (4,  'hello18', NULL, NULL),
    (5,  'hello19', NULL, NULL),
    (6,  'hello20', NULL, NULL),
    (7,  'hello21', NULL, NULL),
    (8,  'hello22', NULL, NULL),
    (9,  'hello23', NULL, 2),
    (10, 'hello24', NULL, NULL),
    (11, 'hello25', NULL, NULL),
    (12, 'hello26', NULL, NULL),
    (13, 'hello27', 2,    NULL),
    (14, 'hello28', NULL, NULL),
    (15, 'hello29', NULL, 1),
    (16, 'hello30', NULL, NULL),
    (17, 'hello31', NULL, NULL),
    (18, 'hello32', NULL, 2),
    (19, 'hello33', NULL, NULL),
    (20, 'hello34', NULL, NULL);
    Cela dit votre modèle de données est à chier et vous allez donc au devant de problèmes de performances gravissimes !

    En effet, il suffit de regarder le plan de requête pour voir la complexité de la requête... complexité qui aurait pu être évitée avec un modèle normalisé (sans NULL au moins déjà !)...
    Nom : plan de requête.gif
Affichages : 176
Taille : 51,3 Ko

    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/ * * * * *

  6. #6
    Candidat au Club
    Homme Profil pro
    Admin SQL Server
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Admin SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut
    Wow
    Merci infiniment !

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

Discussions similaires

  1. besoin d'aide pour creer une hierarchie PHP sqL(MYSql)
    Par amadou77 dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/07/2015, 13h19
  2. Besoin d'aide pour optimiser une petite query sql
    Par AsmCode dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/01/2009, 14h52
  3. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45
  4. Besoin d'aide pour passage de mysql a sql server
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/12/2005, 07h55
  5. besoin d'aide pour intégrer une entité dans un MCD
    Par barkleyfr dans le forum Schéma
    Réponses: 17
    Dernier message: 13/10/2005, 13h29

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