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 :

Différent Champ SELECT [2008]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Par défaut Différent Champ SELECT
    Bonjour à tous,

    Tout d'abords, désolé pour le titre pas très explicite, mais je n'ai pas trouvé mieux. Je travaille sur un projet VB.NET avec une base hébergé sur un SQL Serveur 2008.
    J'ai pour le moment la requête suivante :
    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
     
    SELECT DISTINCT tblHardWareType.IdType,  tblHardWareType.HardwareName + ' - ' + tblGroups.GroupsName as HardwareName from tblGroups 
                                         INNER JOIN tblCountry ON tblGroups.IdCountry = tblCountry.IdCountry  
                                         INNER JOIN tblBuilding ON tblCountry.IdCountry = tblBuilding.IdCountry  
                                         INNER JOIN tblTeam ON tblBuilding.IdBuilding = tblTeam.IdBuilding 
                                         INNER JOIN tblMaterial ON tblTeam.IdTeam = tblMaterial.IdTeam  
                                         INNER JOIN tblHardWareType ON tblMaterial.IdType = tblHardWareType.IdType AND tblGroups.IdGroups = tblHardwareType.IdGroups
                                         where  tblBuilding.IdBuilding = '7' AND tblHardwareType.Visible = 0 AND tblGroups.Visible = 0
                                         UNION 
                                         SELECT DISTINCT tblHardWareType.IdType,  tblHardWareType.HardwareName + ' - ' + tblGroups.GroupsName as HardwareName from tblGroups 
                                         INNER JOIN tblCountry ON tblGroups.IdCountry = tblCountry.IdCountry 
                                         INNER JOIN tblBuilding ON tblCountry.IdCountry = tblBuilding.IdCountry 
                                         INNER JOIN tblHardWareType ON tblGroups.IdGroups = tblHardWareType.IdGroups 
                                         INNER JOIN tblAuthorizedGroups ON tblAuthorizedGroups.IdGroups = tblGroups.IdGroups 
                                         where  tblBuilding.IdBuilding = '7'  AND  tblAuthorizedGroups.UserId = 'MyUserID' AND tblHardwareType.Visible = 1 AND tblGroups.Visible = 0
    qui me retourne :

    1       LAPTOP - IT France
    2	3G KEY MIFI - IT France
    3	BEAMER - IT France
    4	IPAD - IT France
    8	VGA2USB  - IT France
    12	IPAD Camera - IT France
    15	MACBOOK - IT France
    49	GALAXY TAB - IT France
    164	Ext Hard Drive - IT France
    201	LAPTOP - Backend France
    Je voudrais afficher la partie "GroupsName" uniquement s'il y a un doublon pour le HardwareName, autrement dit avoir le résultat suivant :

    1       LAPTOP - IT France
    2	3G KEY MIFI
    3	BEAMER 
    4	IPAD 
    8	VGA2USB 
    12	IPAD Camera 
    15	MACBOOK 
    49	GALAXY TAB 
    164	Ext Hard Drive 
    201	LAPTOP - Backend France
    Je pourrais faire se traitement dans mon code VB, mais je préférerais qu'il soit fait directement dans ma requête. Malheusement je ne vois pas du tout comment faire.

    Quelqu'un pourrait-il me donner une piste ?

    Merci d'avance.

    DeWaRs

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    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
    With SR (IdType, HardwareName, GroupsName) AS
    (
    SELECT tblHardWareType.IdType,  tblHardWareType.HardwareName, tblGroups.GroupsName
      FROM tblGroups 
      JOIN tblCountry       ON tblGroups.IdCountry    = tblCountry.IdCountry  
      JOIN tblBuilding      ON tblCountry.IdCountry   = tblBuilding.IdCountry  
      JOIN tblTeam          ON tblBuilding.IdBuilding = tblTeam.IdBuilding 
      JOIN tblMaterial      ON tblTeam.IdTeam         = tblMaterial.IdTeam  
      JOIN tblHardWareType  ON tblMaterial.IdType     = tblHardWareType.IdType
                           AND tblGroups.IdGroups     = tblHardwareType.IdGroups
     WHERE tblBuilding.IdBuilding  = '7'
       AND tblHardwareType.Visible = 0
       AND tblGroups.Visible       = 0
     UNION ALL
    SELECT tblHardWareType.IdType,  tblHardWareType.HardwareName, tblGroups.GroupsName
      FROM tblGroups 
      JOIN tblCountry          ON tblGroups.IdCountry          = tblCountry.IdCountry 
      JOIN tblBuilding         ON tblCountry.IdCountry         = tblBuilding.IdCountry 
      JOIN tblHardWareType     ON tblGroups.IdGroups           = tblHardWareType.IdGroups 
      JOIN tblAuthorizedGroups ON tblAuthorizedGroups.IdGroups = tblGroups.IdGroups 
     WHERE tblBuilding.IdBuilding     = '7'
       AND tblAuthorizedGroups.UserId = 'MyUserID'
       AND tblHardwareType.Visible    = 1
       AND tblGroups.Visible          = 0
    )
      SELECT IdType
           , HardwareName
           + case count(distinct GroupsName) over(partition by HardwareName) when 1 then '' else ' - ' + GroupsName end as HardwareName
        FROM SR
    GROUP BY IdType
           , HardwareName
           , GroupsName
    ORDER BY IdType ASC;
    J'ai supprimé les distinct et le union dans la requête, car vous faites en réalité un distinct pour le prix de trois. Compte-tenu que derrière je refais un comptage cette opération n'est plus nécessaire.

    L'idée c'est de compter le nombre distincts de GroupsName, s'il vaut un je colle une chaîne vide sinon le nom du groupe.

  3. #3
    Membre éclairé Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Par défaut
    Merci pour votre réponse. Malheureusement, lorsque je test la requête, SQL n'accepte pas le distinct avant le count.
    Msg 102, Level 15, State 1, Line 28
    Incorrect syntax near 'distinct'.
    J'avoue que cela me dépasse un peu ...

    Une idée ?

    Merci encore pour votre aide.

    DeWaRs

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'était une coquille de ma part, il faut en effet le supprimer et ça devrait fonctionner comme attendu.

    Au début que je n'avais pas précisé le GroupsName dans le GROUP BY, mais une fois rajouté le distinct devient inutile et de surcroît refusé par SQL-Server.

  5. #5
    Membre éclairé Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Par défaut
    Effectivement, je l'avais supprimé hier, mais le résultat ne me semblait pas correct. En fait, c'est juste que les données ont été modifiées entre temps

    Merci beaucoup pour votre aide.

    Cordialement.

    DeWaRs

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

Discussions similaires

  1. [MySQL] Problème avec un champ selected
    Par Mimisator dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/01/2006, 17h01
  2. remise à zero d'un champ select
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/11/2005, 16h15
  3. [MySQL] Pb d'insertion d'une valeur de champ select dans une Bdd
    Par Mimisator dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 20/10/2005, 18h51
  4. Réponses: 17
    Dernier message: 16/10/2005, 21h01
  5. Personnalisation d'un champ select : modifier la fleche
    Par teshub dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 05/09/2005, 15h57

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