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

Langage SQL Discussion :

Requête imbriquée avec group by


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut Requête imbriquée avec group by
    Bonjour le Forum,

    Je bloque sur une requête assez simple en fait.
    Je souhaiterais faire une seule requête qui ramène la quantité de la requête 2 dans la requête 1.
    Mais je n'y arrive pas.
    Voir le print screen ci-dessous.

    Donc le résultat souhaité :
    pour l'id 13, avoir une seule ligne =>

    13 1996-12-25 00:00:00.000 10

    Je pourrais faire une vue de la requête 1 et ensuite faire un inner join entre la requête 2 et la vue, mais je souhaiterais la faire en une seule requête.

    Je suis sur sql serveur 2005

    Comment feriez-vous ?

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    La quantité par produit à la date la plus récente c'est ça ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Exactement....

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    J'ai vu une astuce récemment qui permet de se passer de la jointure :
    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
    WITH Orders(ProductID, OrderDate, Quantity) AS
    (
    select 13, cast('1996-12-23' as datetime), 18 union all
    select 13, cast('1996-12-25' as datetime), 10 union all
    select 13, cast('1996-12-16' as datetime), 20 union all
    select 14, cast('1996-12-06' as datetime), 15 union all
    select 14, cast('1996-12-25' as datetime), 42 union all
    select 18, cast('1996-12-13' as datetime), 9 union all
    select 20, cast('1996-12-16' as datetime), 28 
    )
    select
        ProductID,
        max(OrderDate) as OrderDate_m,
        cast(substring(max(convert(VARCHAR(8),OrderDate, 112)+cast(Quantity as varchar(2))), 9, 2) as smallint) as Quantity_m
    from Orders
    group by ProductID;
     
     
    ProductID	OrderDate_m		Quantity_m
    --------------- ----------------------- ----------------
    13		1996-12-25 00:00:00.000	10
    14		1996-12-25 00:00:00.000	42
    18		1996-12-13 00:00:00.000	9
    20		1996-12-16 00:00:00.000	28

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Merci Waldar,

    cool ca, je comprends bien le principe mais j'ai une erreur avec le with.
    Au lieu de mettre les union comme tu l'as fait (puisque tu n'as pas les données), je mets ma requete 2

    Sur mon poste actuel sur lequel je fais le test, c'est sql2000, la fonction with ne marche pas ?

    Merci

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Plutôt marrant Waldar

    Sinon le WITH n'est effectivement pas implémenté dans le SQL Server 2000, mais dans les version suivantes.
    Mais ce n'est pas grave, vu que c'était juste pour faire une démo avec quelques données (enfin tu l'as bien compris, je crois)

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Citation Envoyé par pobrouwers Voir le message
    cool ca, je comprends bien le principe mais j'ai une erreur avec le with.
    Au lieu de mettre les union comme tu l'as fait (puisque tu n'as pas les données), je mets ma requete 2

    Sur mon poste actuel sur lequel je fais le test, c'est sql2000, la fonction with ne marche pas ?
    Comme Pacmann l'indique le WITH c'était pour créé un jeu de donnée, gardez uniquement la partie SELECT et n'y injectez pas votre seconde requête mais directement votre table.

    Egalement pour information la capture d'écran ce n'est pas adapté car on doit tout retaper à la main au lieu de faire des copier / coller.

    Pacmann > l'astuce provient du grand maître

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/07/2008, 18h03
  2. Construction d'une requête "imbriquée" avec Oracle
    Par kyra78 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 05/02/2008, 15h29
  3. Requête union avec group by qui gère les 2 requêtes.
    Par juha dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/10/2007, 10h38
  4. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 11h37
  5. [DB2] Requête imbriquée avec opérateur IN
    Par JFDelges dans le forum Langage SQL
    Réponses: 23
    Dernier message: 21/12/2005, 12h27

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