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

MS SQL Server Discussion :

Fusionner 2 jeux de resultat en T-SQL


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut Fusionner 2 jeux de resultat en T-SQL
    Bonjour.
    Actuellement c'est mes premiers code en T-SQL donc gros débutant .

    Dans mon code j'ai plusieurs jeux de résultat mais au final je voudrais qu'il puisse fusionner pour que je puisse l'exploiter à l'exterieur. les jeux de resultat ont la même structure. je voudrais savoir comment faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @code varchar(250)
    DECLARE CodeTXN CURSOR
    FOR (SELECT txn_code FROM tb_taxinomie WHERE txn_code LIKE 'inf%' AND (txn_resp2='toto@titi.fr' OR txn_resp1='toto@titi.fr'))
    OPEN CodeTXN
    FETCH NEXT FROM CodeTXN INTO @code
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SELECT txn_code FROM tb_taxinomie WHERE txn_code LIKE @code+'%'	
    	FETCH NEXT FROM CodeTXN INTO @code	
    END
    Merci

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    bonjour,

    il serait intéressant que tu nous dises pourquoi tu fais un curseur, afin qu'on t'explique comment ne pas le faire

    Admettons que j'ai bien compris la question. Pour fusionner des résultats de divers SELECT, tu peux utiliser le mot-clé UNION ou UNION ALL. UNION n'affiche pas les lignes identiques.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 1 as colonne
    UNION
    SELECT 1
    UNION
    SELECT 2

  3. #3
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    J'ai essayé avec le UNION mais c'est pas possible. Je suis passé par là parce que j'ai une première requête qui me retourne un jeux de resultat et pour chaque enregistrement je fais une requête pour récupérer d'autre resultats et au final j'ai besoin de fusionner tous les résultats.
    J'en suis arrivé là parce que c'est la structure des données qui est ainsi. Je peux bien largement passer par du vb mais c'est moin intéressant au moin là j'apprend un peut le T-SQL.

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Sans plus de détails, il est difficile de te donner des conseils.
    En résumé, le curseur est la construction à éviter le plus possible, parce qu'elle offre des performances dégradées, et qu'elle est contraire aux principes de SQL: travailler avec des jeux de données, pas ligne par ligne.

    Tu as ici quelques techniques pour éviter les curseurs :
    http://sqlpro.developpez.com/cours/s...r_avoidCursor/

    La plupart du temps, on peut faire autrement. J'ai dû faire pas plus que trois ou quatre curseurs dans du code de production en huit ans de SQL.

    Pour l'UNION, j'avoue ne pas avoir bien compris ton problème, et comment ça fait pour ne pas marcher. Des détails seraient utiles, du genre structure des données et résultat voulu

  5. #5
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Ok je vais donner plus de détails.
    Voici la structure qui est une sorte de taxinomie.
    code|code_parent|responsable1|responsable2

    inf|<null>|toto|<null>
    inf.int|inf,<null>|<null>
    inf.int.oop|inf.int|tata|titi
    inf.int.oop.lop|inf.int.oop|<null>|<null>
    inf.int.oop.ert|inf.int.oop|<null>|<null>
    inf.int.aze|inf.int|titi|tutu
    inf.int.aze.klm|inf.int.aze|<null>|<null>

    Le champs "code" a un code parent. Le but est de récupérer tous les codes fils du responsable 1 ou 2.
    Exemple : si je demande titi il faut qu'il puisse me retourner cette suite.
    inf.int.oopp
    inf.int.oop.lop
    inf.int.oop.ert
    inf.inf.int.aze
    inf.int.aze.klm

    Vous aurez compris que si je demande toto il devrait me retourner tous les enregistrements.

    Ce qu'il se passait avec le premier code T-SQL il me séparait les resultats et j'avais ceci :

    inf.int.oopp
    inf.int.oop.lop
    inf.int.oop.ert
    -----------------
    inf.inf.int.aze
    inf.int.aze.klm

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Ah ah! Tu gère une arborescence. C'est une vieille question en SQL. Il y a un article sur le sujet ici.
    http://sqlpro.developpez.com/cours/arborescence/

    Si tu ne peux par changer la structure des données, je te suggère une boucle WHILE avec un ajout dans une table temporaire. Je suppose que les niveaux de ton arborescence sont sans limite ?

    exemple rapide de code (non testé):
    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
     
    DECLARE @tmp TABLE (code varchar(100))
    DECLARE @rowcount int
     
    INSERT INTO @tmp (code)
    SELECT code
    FROM table 
    WHERE responsable1 = 'titi' OR responsable2 = 'titi'
     
    SET @rowcount = @@ROWCOUNT
     
    WHILE @rowcount > 0 BEGIN
    	INSERT INTO @tmp (code)
    	SELECT t.code
    	FROM table t
    	JOIN @tmp tt ON t.code = tt.codeParent
     
    	SET @rowcount = @@ROWCOUNT
    END
     
    SELECT DISTINCT * FROM @tmp

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

Discussions similaires

  1. Fusionner des lignes en resultat
    Par kalagool dans le forum DB2
    Réponses: 3
    Dernier message: 30/04/2008, 15h31
  2. Réponses: 2
    Dernier message: 06/07/2007, 11h21
  3. Encodage bizare des resultats des requetes sql
    Par bastien03 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/06/2007, 13h18
  4. [c#][sql server ce] recuperer le resultat dune requete sql
    Par Jessika dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 09/05/2007, 10h08
  5. [Access] Liste de résultats acceptant +sieurs SQL
    Par Céd29 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/10/2006, 16h17

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