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 :

[SQL server] requete sql join/union?


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Points : 166
    Points
    166
    Par défaut [SQL server] requete sql join/union?
    bonjour,
    j'ai une requete sql qui selon un numero de dossier me ramene les trois premieres l'etre de l'ID (referent):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     COUNT(*) AS nbref, SUBSTRING(Referent, 1, 3) AS ref
    FROM         ReferentCommande
    WHERE     (Dossier = 16654)
    GROUP BY SUBSTRING(Referent, 1, 3)
    qui me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NbRef 	Ref
    1	 Pas
    2	GOO

    et une autre requete tjs en fonction d'un dossier me renvoie le total ici 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT     COUNT(*) AS Total
    FROM         ReferentCommande AS ReferentCommande_1
    WHERE     (Dossier = 16654)


    J'aimerais si cela est possible arriver a faire une requete qui a la place de nbref me donne la ponderation, a savoir 1/3 pour la premeiere ligne et 2/3 pour la seconde....


    Quelqu'un aurait -il une idée?

    D'avance merci beaucoup de votre aide!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 400
    Points
    28 400
    Par défaut
    Si ta version de SQL Server prend en charge les fonctions de regroupement analytique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  COUNT(*) AS nbref
        ,   COUNT(*) OVER ()    as total
        ,   SUBSTRING(Referent FROM 1 FOR 3) AS ref
    FROM    ReferentCommande
    WHERE   Dossier = 16654
    GROUP BY SUBSTRING(Referent FROM 1 FOR 3)
    ;
    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Points : 166
    Points
    166
    Par défaut
    le count over () prend en compte le nombre de ligne ici 2 et non 3 mais j'ai trouvé une autre solution beaucoup plus lourde,
    merci quand meme!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 745
    Points : 166
    Points
    166
    Par défaut
    le code qui fonctionne étant le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT     STR(aa.nbref / test.Total * 100, 10, 2) + '%' AS Pondération, aa.ref
    FROM         (SELECT     CAST(COUNT(*) AS decimal(10, 2)) AS nbref, SUBSTRING(Referent, 1, 3) AS ref, Dossier
                           FROM          ReferentCommande
                           WHERE      (Dossier = 16654)
                           GROUP BY SUBSTRING(Referent, 1, 3), Dossier) AS aa INNER JOIN
                              (SELECT     CAST(COUNT(*) AS decimal(10, 2)) AS Total, Dossier
                                FROM          ReferentCommande AS ReferentCommande_1
                                WHERE      (Dossier = 16654)
                                GROUP BY Dossier) AS test ON test.Dossier = aa.Dossier

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

Discussions similaires

  1. Requete SQL sous MS SQL Server Imbriqué
    Par siva27 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 10/02/2014, 20h33
  2. Requete SQL sous MS SQL Server
    Par siva27 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 31/01/2014, 10h34
  3. [SQL Server] requete sql 'where'
    Par khayate dans le forum Langage SQL
    Réponses: 18
    Dernier message: 25/05/2007, 16h42
  4. Réponses: 2
    Dernier message: 04/11/2006, 00h33
  5. Requete SQL sur base SQL Server VB6
    Par Yanmeunier dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/11/2005, 12h30

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