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 :

Regrouper plusieurs lignes en une seule


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Regrouper plusieurs lignes en une seule
    Bonjour,

    Je suis relativement débutant en SQL ; je bosse actuellement sur des rapports SCCM et j'ai un petit problème.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT
    	SYS.Name0 AS [Computer Name],
    	SOUN.System_OU_Name0
     
    FROM v_R_System SYS
     
    LEFT JOIN v_RA_System_SystemOUName SOUN on SYS.ResourceID = SOUN.ResourceID
    Et voici le résultat :

    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
    Computer Name		System OU Name  
    ------------------------------------------------------
    Computer 1		DomainName.com
    Computer 1		DomainName.com/OU1
    Computer 1		DomainName.com/OU1/OU1.1
    Computer 1		DomainName.com/OU1/OU1.1/OU1.1.1
    Computer 1		DomainName.com/OU1/OU1.1/OU1.1.1/OU1.1.1.1
    Computer 2		DomainName.com
    Computer 2		DomainName.com/OU1
    Computer 2		DomainName.com/OU1/OU1.2
    Computer 2		DomainName.com/OU1/OU1.2/OU1.2.1
    Computer 2		DomainName.com/OU1/OU1.2/OU1.2.1/OU1.1.1.4
    Computer 3		DomainName.com
    Computer 3		DomainName.com/OU2
    Computer 3		DomainName.com/OU2/OU2.1
    Computer 3		DomainName.com/OU2/OU2.1/OU2.1.3
    Computer 3		DomainName.com/OU2/OU2.1/OU2.1.3/OU2.1.3.2
    J'aimerais moi qu'il n'y ait qu'une seule ligne par ordinateur, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* seule la plus longue ligne SYSTEM OU NAME est gardée */
    Computer Name		System OU Name  
    ------------------------------------------------------
    Computer 1		DomainName.com/OU1/OU1.1/OU1.1.1/OU1.1.1.1
    Computer 2		DomainName.com/OU1/OU1.2/OU1.2.1/OU1.1.1.4
    Computer 3		DomainName.com/OU2/OU2.1/OU2.1.3/OU2.1.3.2
    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* les différentes lignes SYSTEM OU NAME sont concaténées */
    Computer Name		System OU Name  
    ------------------------------------------------------
    Computer 1		DomainName.com DomainName.com/OU1 DomainName.com/OU1/OU1.1 DomainName.com/OU1/OU1.1/OU1.1.1 DomainName.com/OU1/OU1.1/OU1.1.1/OU1.1.1.1
    Computer 2		DomainName.com DomainName.com/OU1 DomainName.com/OU1/OU1.2 DomainName.com/OU1/OU1.2/OU1.2.1 DomainName.com/OU1/OU1.2/OU1.2.1/OU1.1.1.4
    Computer 3		DomainName.com DomainName.com/OU2 DomainName.com/OU2/OU2.1 DomainName.com/OU2/OU2.1/OU2.1.3 DomainName.com/OU2/OU2.1/OU2.1.3/OU2.1.3.2
    Est-ce possible sur un SQL server 08 ?

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut Méthode de bourin
    On peut le faire avec deux sous-requêtes :
    La première calcule la longueur de chaque libellé (champ Lg)
    La seconde calcule la longueur maxi pour chaque ordinateur (champ MaxLg)

    On recherche le libellé pour lequel la longueur est maximum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  A.[Computer Name], A.System_OU_Name0
    FROM    (
                 SELECT  SYS.Name0 AS [Computer Name], SOUN.System_OU_Name0, LEN(SOUN.System_OU_Name0) As Lg
                 FROM    v_R_System SYS LEFT JOIN 
                         v_RA_System_SystemOUName SOUN ON SYS.ResourceID = SOUN.ResourceID
             ) A INNER JOIN
            (
                SELECT SYS.Name0 AS [Computer Name], MAX(LEN(SOUN.System_OU_Name0)) As LgMax
                FROM v_R_System SYS LEFT JOIN v_RA_System_SystemOUName SOUN ON SYS.ResourceID = SOUN.ResourceID
                GROUP BY SYS.Name0
            ) B ON A.[Computer Name] = B.[Computer Name] AND A.Lg = B.LgMax
    Il doit être possible de mieux faire avec la clause HAVING mais j'ai la flegme
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup !!

    J'ai pu adapter cette solution à ma requête complète, ça me sort exactement ce que je veux

    Encore merci.

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

Discussions similaires

  1. [XL-2010] Regroupement de plusieurs lignes en une seule
    Par George_14 dans le forum Excel
    Réponses: 1
    Dernier message: 20/11/2013, 19h05
  2. Regrouper plusieurs lignes dans une seule
    Par djinpark1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2013, 13h26
  3. [AC-2003] Regrouper plusieurs lignes en une seule
    Par DeFCrew dans le forum IHM
    Réponses: 2
    Dernier message: 20/12/2010, 16h19
  4. Regrouper plusieurs lignes sur une seule
    Par Mygush dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/09/2009, 11h05
  5. Regrouper données plusieurs ligne en une seule
    Par willytito dans le forum Access
    Réponses: 2
    Dernier message: 03/09/2007, 10h35

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