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 :

Problème de requête SQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de lalouve
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 128
    Par défaut Problème de requête SQL
    Bonjour à tous,

    Je rencontre quelques difficultés dans la rédaction d'une requête SQL qui devrait sembler triviale à beaucoup d'entre vous. Malheureusement mes connaissances en SQL sont très basiques, c'est pourquoi je fais appel à vous.

    Voici le contexte :

    1 table qui contient une liste de sociétés (sans doublons).
    1 table qui contient les infos des sociétés pour chaque année.

    Il me faudrait retourner la liste sans doublons des sociétés avec les dernières informations disponibles de chaque société.

    J'ai bien essayé de faire cela en 1 requête mais sans succès, je fais donc un truc pas très propre du tout :

    Je récupère la liste des sociétés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 50 "V_SOCIETE_SOC"."SDT_NOM", "V_SOCIETE_SOC"."PAY_NOM", "V_SOCIETE_SOC"."SEC_NOM", "V_SOCIETE_SOC"."SDT_SOCIETE_ID", "V_SOCIETE_SOC"."SDT_ANNEE" FROM "V_SOCIETE_SOC" ORDER BY "SDT_NOM" ASC
    Et puis dans un second temps une boucle qui pour chaque enregistrement récupère les infos des sociétés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 1 * FROM V_SOCIETE_SOC WHERE SDT_SOCIETE_ID = n ORDER BY SDT_ANNEE DESC
    Quelqu'un pourrait-il m'aider à rédiger cette requête ou me donner une piste ?

  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
    Par défaut
    Piste : Partition by


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT
     "V_SOCIETE_SOC"."SDT_NOM", "V_SOCIETE_SOC"."PAY_NOM", "V_SOCIETE_SOC"."SEC_NOM", "V_SOCIETE_SOC"."SDT_SOCIETE_ID", "V_SOCIETE_SOC"."SDT_ANNEE"
    FROM (
    SELECT 
    *
    , ROW_NUMBER() OVER (PARTITION BY "SDT_SOCIETE_ID" ORDER BY "SDT_ANNEE DESC") AS Row
    FROM "V_SOCIETE_SOC"
    ) AS EXT
    WHERE Row = 1
    ORDER BY "SDT_NOM" ASC

  3. #3
    Membre éprouvé Avatar de lalouve
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2004
    Messages : 128
    Par défaut
    Un grand merci à toi Sergejack pour avoir pris le temps d'écrire cette requête qui fonctionne à merveille !

    Encore une dernière petite question concernant la "pagination" des lignes renvoyées.
    Je pense par exemple à ceci pour extraire les lignes entre 250 et 300...
    Cela fonctionne mais n'existe t'il pas une autre façon plus simple / élégante ?
    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
     
    SELECT
    *
    FROM (
      SELECT TOP 50 * 
      FROM ( 
        SELECT TOP 300 *
        FROM (
          SELECT *
          FROM (
            SELECT *
            , ROW_NUMBER() OVER (PARTITION BY "SDT_SOCIETE_ID" ORDER BY "SDT_ANNEE" DESC) AS Row
            FROM 
            "T_SOCIETE_DATA_SDT" ) AS EXT
          WHERE Row = 1 ) AS tmp
        ORDER BY "SDT_NOM" ASC ) AS inner_tbl
      ORDER BY "SDT_NOM" DESC ) AS outer_tbl
    ORDER BY "SDT_NOM" ASC

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

Discussions similaires

  1. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  2. problème de requète SQL pour formulaire
    Par en_stage dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2005, 12h21
  3. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  4. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

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