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 ne prenant qu'un seul tuple parmi plusieurs aléatoirement


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut Requête ne prenant qu'un seul tuple parmi plusieurs aléatoirement
    Bonjour et Bonne Année à tous!

    Je reviens vers vous aujourd'hui car j'ai un petit soucis, qui parait simple mais, sans doute pour cela, j'ai du mal à mettre en place!

    J'ai une table composée de la sorte - 1er jeu d'enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Auteur | Titre
    -----------------------------------
    Luc	| promenades au bois
    Marion	| cuisiner facile
    Marion	| lire les cartes
    Andrew	| mode emploi des cocotes
    Filou	| peintures avec les doigts
    Filou	| le chocolat
    Filou	| bouteille à la mer
    Et, suite à ma requête que j'ai du mal à mettre en place, je souhaiterais récupérer, dans une table temporaire, ces données suivantes - 2ème jeu d'enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Auteur | Titre
    -----------------------------------
    Luc	| promenades au bois
    Marion	| cuisiner facile
    Andrew	| mode emploi des cocotes
    Filou	| peintures avec les doigts
    C'est à dire ne prendre qu'un enregistrement, peut importe lequel pour un auteur donné.

    Voici ma requête qui me permet de sortir le premier jeu d'enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO Livre_auteur (auteur,titre)
    SELECT auteur, titre
    FROM bouquin
    WHERE     (titre <> 0)
    GROUP BY auteur, livre, etat
    HAVING  (etat = N'0')
    ORDER BY auteur
    Qui a une idée?
    Merci par avance

  2. #2
    Membre confirmé Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Coucou,
    alors finalement j'ai trouvé, je passe par une requête de mise à jour dans laquel je lui passe un Select TOP 1 qui permet de ne prendre qu'un seul tuple.

    Désolée de vous avoir embeter avec mon soucis mais si ça peut aider certain, ça me rassure
    @++

  3. #3
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Et en utilisant la fonction ROW_NUMBER() ? (Si vous êtes en version 2005 ou plus)

    Exemple :

    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
    DECLARE @t TABLE (
     auteur VARCHAR(20),
     titre VARCHAR(50)
    );
     
    INSERT @t VALUES ('Luc','promenades au bois');
    INSERT @t VALUES ('Marion','cuisiner facile');
    INSERT @t VALUES ('Marion','lire les cartes');
    INSERT @t VALUES ('Andrew','mode emploi des cocotes');
    INSERT @t VALUES ('Filou','peintures avec les doigts');
    INSERT @t VALUES ('Filou','le chocolat');
    INSERT @t VALUES ('Filou','bouteille à la mer');
     
    SELECT 
    	auteur,
    	titre
    FROM
    (
    	SELECT 
    		ROW_NUMBER() OVER (PARTITION BY auteur ORDER BY auteur) AS num,
    		* 
    	FROM @t
    ) AS temp
    WHERE num = 1;
     
    -- Résultat
    -- Auteur   Titre
    -- Andrew	mode emploi des cocotes
    -- Filou	peintures avec les doigts
    -- Luc	    promenades au bois
    -- Marion	cuisiner facile
    ++

  4. #4
    Membre confirmé Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    Merci mikedavem
    C'est une alternative effectivement! Il faut que je me penche un peu plus sur les OVER (PARTITION..., c'est la deuxième fois que l'on me propose des solutions avec ça et j'ai pas encore le réflexe!!
    @++

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

Discussions similaires

  1. mon imprimante n'imprime q'une seule copie parmi plusieurs
    Par pipipicontrole dans le forum Word
    Réponses: 1
    Dernier message: 19/05/2014, 17h33
  2. Réponses: 3
    Dernier message: 06/02/2009, 15h22
  3. Réponses: 6
    Dernier message: 02/11/2007, 22h49
  4. Récupérer une seule valeur parmi plusieurs
    Par geraldgg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/05/2007, 10h26
  5. [Requêtes] Selectionner une seule date parmis plusieurs
    Par Herman dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 28/03/2007, 15h01

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