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 :

Gestion de combinaisons


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Gestion de combinaisons
    Bonjour à tous,

    Je me trouve devant un pb que je ne sais pas comment résoudre. Merci par avance pour les conseils :


    Voici le pb :

    Ma table est la suivant :

    | Id | Nom | C1 | C2 |
    ---------------------
    | 1 | S1 | 1 | 0 |
    | 2 | S1 | 0 | 1 |
    | 3 | S2 | 1 | 0 |
    | 4 | S2 | 0 | 1 |
    | 5 | S2 | 1 | 1 |
    | 6 | S3 | 0 | 1 |

    Je veux retourner l'ensemble des combinaisons possibles S1,S2,S3 :

    Ce qui donne :

    | Combinaison | Nom | C1 | C2 |
    -------------------------------
    | 1 | S1 | 1 | 0 |
    | 1 | S2 | 1 | 0 |
    | 1 | S3 | 0 | 1 |

    | 2 | S1 | 1 | 0 |
    | 2 | S2 | 0 | 1 |
    | 2 | S3 | 0 | 1 |

    | 3 | S1 | 1 | 0 |
    | 3 | S2 | 1 | 1 |
    | 3 | S3 | 0 | 1 |

    | 4 | S1 | 0 | 1 |
    | 4 | S2 | 1 | 0 |
    | 4 | S3 | 0 | 1 |

    | 5 | S1 | 0 | 1 |
    | 5 | S2 | 0 | 1 |
    | 5 | S3 | 0 | 1 |

    | 6 | S1 | 0 | 1 |
    | 6 | S2 | 1 | 1 |
    | 6 | S3 | 0 | 1 |

    ou bien encore sous un autre format :

    | Combinaison | Ids |
    -----------------------
    | 1 | 1,3,6 |
    | 2 | 1,4,6 |
    | 3 | 1,5,6 |
    | 4 | 2,3,6 |
    | 5 | 2,4,6 |
    | 6 | 2,5,6 |

    Encore une fois merci pour votre aide.

  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
    Points : 1 234
    Points
    1 234
    Par défaut
    En éliminant les doublons ?

    Si non, c'est simple, vous faites 3 jointures (cross join).
    Most Valued Pas mvp

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse, mais je ne vois pas comment on peut faire en supprimant les doublons ?

    J'ai fait le test avec des CROSS Join mais cela ne me va pas car en fait il s'agit ici d'un exemple ou il n'y a que S1,S2,S3 mais cela doit être dynamique car je peux demander les combinaisons pour S2 et S3 seulement, je dois donc passer par un CTE ou un curseur mais je n'ai pas encore trouvé comment.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Une piste ici

    @++

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai déjà étudié cela auparavant mais je ne vois pas comment l'adapter à mon besoin.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Voici la réponse
    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
    DECLARE @Count Int;
    DECLARE @Noms nvarchar(4000);
     
    SET @Noms = 'S1,S2,S3'; 
    SET @Count = (SELECT COUNT(*) FROM FT_Split(@Noms,','));
     
    WITH Combinaisons ( Level, Id ) AS
    (
    	SELECT @Count, CAST(Table.Id AS nvarchar(21)) FROM Table WHERE (Table.Nom = (SELECT Items FROM FT_Split(@Noms, ',') WHERE (Id = @Count)))
     
    	UNION ALL
     
    	SELECT  Level - 1, CAST(Combinaisons.Id AS nvarchar(10)) + ',' +  CAST(Table.Id AS nvarchar(10))
    	FROM	Combinaisons CROSS JOIN dbo.Table
    	WHERE	(Table.Nom = (SELECT Items FROM FT_Split(@Noms, ',') WHERE (Id = Level-1))) AND Level > 0
     
    )
        SELECT * FROM Combinaisons WHERE (Level = 1)
        OPTION ( MAXRECURSION 500 )

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/08/2002, 21h37
  2. Réponses: 2
    Dernier message: 22/07/2002, 18h02
  3. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  4. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11
  5. gestion d'un joystick ...
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h53

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