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 :

Group by dans un sous requête avec SQL SERVER


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Par défaut Group by dans un sous requête avec SQL SERVER
    Bonjour ,
    Je rencontre un soucis avec un group by dans un sous requête.

    Voila ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      select *
      FROM (
      SELECT 
          E.SOLDE_FORCE AS SOLDE
          ,E.[FK_CUSTOMER]
          ,(SELECT MIN(FK_JOUR) FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER) AS MINJOUR
          ,(SELECT MIN(FK_MAGASIN) FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER ORDER BY FK_JOUR) AS MINMAGASIN
      FROM [MG_APP].[dbo].[FID.SOLDE_FORCE] E) A 
       INNER JOIN  [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] AA ON AA.fk_customer=A.FK_CUSTOMER AND  AA.FK_jour=A.MINJOUR and AA.FK_MAGASIN=A.MINMAGASIN
    j'ai un message d'erreur :
    Msg 1033, Level 15, State 1, Line 7
    La clause ORDER BY n'est pas valide dans les vues, les fonctions inline, les tables dérivées, les sous-requêtes et les expressions de table communes, sauf si TOP ou FOR XML est également spécifié.
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 442
    Par défaut
    Bonjour,
    Je réponds peut-être à côté, mais je ne vois pas l'utilité du ORDER BY dans cette sous-requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MIN(FK_MAGASIN) FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER ORDER BY FK_JOUR

    Mais comme je ne vois pas de group-by dans les sous-requêtes, et que cette sous-requête est justement à la ligne 7...

    Tatayo.

  3. #3
    Membre éclairé
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Par défaut
    J'ai essayé de simplifier la requête mais effectivement , ça n'a pas de sens .

    Voilà ce que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     select *
      FROM (
      SELECT 
          E.SOLDE_FORCE AS SOLDE
          ,E.[FK_CUSTOMER]
          ,(SELECT MIN(FK_JOUR) FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER) AS MINJOUR
          ,(SELECT MIN(FK_MAGASIN) FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER ORDER BY(SELECT MIN(FK_JOUR) FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER)) AS MINMAGASIN
      FROM [MG_APP].[dbo].[FID.SOLDE_FORCE] E) A 
       INNER JOIN  [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] AA ON AA.fk_customer=A.FK_CUSTOMER AND  AA.FK_jour=A.MINJOUR and AA.FK_MAGASIN=A.MINMAGASIN

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 442
    Par défaut
    Je persiste: quel est l'intérêt de l'instruction ORDER BY, vu que ta sous-requête ne renvoie qu'une seule ligne ?
    Est-ce que tu peux (essayer de) traduire ce que tu cherches à faire avec cette sous-requête ?

    Tatayo.

  5. #5
    Membre éclairé
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Par défaut
    J'ai 3 informations: FK_CUSTOMER, FK_JOUR,FK_MAGASIN

    Je veux avoir une seule ligne pour chaque FK_CUSTOMER qui présente la date de la première transaction, si'ajoute pas le FK_MAGASIN ça fonctionne correctement sauf pour les clients qui ont visité dans le même jour deux magasin différents.
    Pour faire façe à ce problème j'ai ajouté le min magasin par Min jour

    Exemple

    Fk_customer FK_MAGASIN FK_jour
    A 5 Lundi
    A 1 Lundi

    Je veux avoir comme résultat:

    A 1 Lundi

    C'est clair?

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 442
    Par défaut
    Je vois (au moins) deux problèmes dans ta requête:
    La première sous-requête (ligne 6) renvoie le plus petit FK_JOUR pour ce client
    La deuxime sous-requête (ligne 7) renvoie le plus petit FK_MAGASIN pour ce client
    Mais rien ne lie les deux sous-requêtes, à part le code client
    Donc si tu as ce jeu de test:
    Fk_customer FK_MAGASIN FK_jour
    A 5 Lundi
    A 1 Mardi

    Tu obtiens:
    A 1 Lundi

    Maintenant c'est peut-être ce que tu cherches ?

    Quoi qu'il en soit, je ne vois toujours pas à quoi sert l'order by à la ligne 7. Le plus petit KG_MAGASIN, pour un FK_CUSTOMER donné, reste le même, quelque soit la colonne sur laquelle tu tentes de trier le résultat (qui je le répète se résume à au plus une ligne).

    Tatayo.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2019, 09h42
  2. Réponses: 2
    Dernier message: 14/10/2013, 12h09
  3. Remplir un DataGridView sous C# avec SQL Server
    Par Aero'ix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/08/2012, 16h54
  4. Sous-requête avec Group by
    Par univscien dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/12/2009, 22h32
  5. Réponses: 3
    Dernier message: 30/06/2009, 19h16

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