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 :

Group by avec MAX ou equivalent


Sujet :

MS SQL Server

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Group by avec MAX ou equivalent
    Bonjour

    J'ai une vue qui peut contenir plusieurs type pour un ID

    ID | TP
    1 | NULL
    1 | 0
    1 | 2

    L'idee est de pouvoir pour CHAQUE ID retourner un UN et UN seul TYPE avec une preference d'ordre
    Dans le cas present comment exprimer en SQL que je souhaite le Type 1 et par défaut 0 (éventuellement 2)

    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.ID, COALESCE(T1.TYP, T2.TIP) AS TIP
    FROM   ??? AS T1
           INNER JOIN ??? AS T2
                  ON T1.ID = T2.ID
    WHERE  T1.TYP = 1
      AND  T2.TYP = 0
    Merci la prochaine fois de poster le DDL de vos tables en vous conformant à la charte de postage : http://www.developpez.net/forums/d96...vement-poster/

    A +

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci SQL Pro

    En fait mon select se fait sur une vue
    Le select ci-dessous me rends comme je le disais plusieurs fois
    ID, HRK, Name
    pour chaque ImageType rencontré

    J'aimerais sortir des ID distinct avec une priorité de ImageType
    Comment utiliser Coalesce pour faire cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
           [ID]
          ,[HRK]
          ,[Name]
          ,[ImgName]
          ,[ImageType]
      FROM [Touch-DEV].[dbo].[ViewYRDevices]

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Donnez nous un jeu d'essais sous forme INSERT et le résultat attendu. En cela vous vous conformerez à la charte de postage.

    A +

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Donnez nous un jeu d'essais sous forme INSERT
    Je repete que mon select se fait sur une vue

    Je ne pense pas que produire les INSERT permettant de garnir les différentes tables liée a ma vue permette d'expliquer plus simplement ma question

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
           [ID]
          ,[HRK]
          ,[Name]
          ,[ImgName]
          ,[ImageType]
      FROM [Touch-DEV].[dbo].[ViewYRDevices
    where ImageType=1
    Je vais avoir la liste de tous les ID ayant un imagetype a 1
    Malheureusement certains ID n'ont pas d'imagetype a 1

    L'idée c'est donc de pouvoir sortir tous les ID avec un imagetype a un et donner une regle de priorité pour sortir AUSSI ceux qui auraient d'autres imagetype mais pas 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Et si nécessaire, voici le code de la vue
     
    SELECT     mediaDef.ID, mediaType.TechnicalName, mediaDef.Actif, mediaDef.HRK, mediaDef.Name, YR.ImagesRef.ImgName, YR.ImagesRef.ImageType
    FROM         dbo.MediaDef AS mediaDef INNER JOIN
                          dbo.MediaType AS mediaType ON mediaType.ID = mediaDef.MediaType AND mediaType.TechnicalName <> 'LAPTOP' LEFT OUTER JOIN
                          YR.ImagesRef ON mediaDef.ID = YR.ImagesRef.MediaDef
    UNION
    SELECT     [ProdID], 'LAPTOP' AS [TechnicalName], 1 AS Actif, HRK, [FullName] AS Name, NULL AS ImgName, 0 AS ImageType
    FROM         [Touch-DEV].[dbo].[LaptopModels]

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Voilà

    Je pense avoir trouvé une solution, comme ca ne semblait pas évident, je la soumet ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select *
    from 
    (
    select *, row_no = row_number() over (partition by ID order by case when ImageType = '2' then 1 else 2 end, ImageType desc)
    from ViewYRDevices
    ) i
    where i.row_no = 1

Discussions similaires

  1. [2008R2] GROUP BY avec MAX d'une date
    Par Piou2fois dans le forum Développement
    Réponses: 1
    Dernier message: 17/10/2013, 15h34
  2. Clé primaire d'une requete GROUP BY avec MAX
    Par befb dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 30/07/2010, 09h29
  3. requête avec MAX et GROUP BY
    Par arcane dans le forum Langage SQL
    Réponses: 8
    Dernier message: 30/01/2008, 13h21
  4. [SQL Server] Requete avec MAX et group by
    Par joKED dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/01/2007, 13h00
  5. Requete avec max et group by
    Par Maxime555 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2006, 11h48

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