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 :

sous requete et count


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 32
    Par défaut sous requete et count
    Bonjour,
    Si quelqu'un à une idée sur la rèquete à effectuer :
    * le nom de la tournée contient le code de la région sur les 4 premier caractères et le reste est le numéro de la tournée.
    * une tournée peut effectué plusieurs passage en une journée

    La sous requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT convert(date,date_passage,103), nom_tournee from passage
    me sort la liste de toutes les tournées par date effectuées en une journée au moins un passage
    Je souhaiterai avoir pour chaque region (substring(nom_tournee,1,4)) le nombre de tournées effectuées pour chaque date.
    J'ai tenté cette requte mais elle ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT convert(date,date_passage,103), count(substring(nom_tournee,1,4)) 
    FROM (SELECT DISTINCT convert(date,date_passage,103), nom_tournee from passage)
    GROUP BY convert(date,date_passage,103);
    Merci d'avance,

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CONVERT(CHAR(10), Date, 103) AS Jour,
    		Region,
    		COUNT(*) nNbOccurences
    FROM
    (
    	SELECT date AS Date,
    			SUBSTRING(nom_tournee, 1, 4) AS Region
    	FROM dbo.passage
    ) SUB (Date, Region)
    GROUP BY CONVERT(CHAR(10), Date, 103), Region
    ORDER BY Date, Region
    Ou encore, dès SQL Server 2005 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH
    	CTE_TOURNEES (Date, Region) AS
    	(
    		SELECT date AS Date,
    				SUBSTRING(nom_tournee, 1, 4) AS Region
    		FROM dbo.passage
    	)
    SELECT CONVERT(CHAR(10), Date, 103) AS Jour,
    		Region,
    		COUNT(*) nNbOccurences
    FROM CTE_TOURNEES
    GROUP BY CONVERT(CHAR(10), Date, 103), Region
    ORDER BY Date, Region
    @++

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 32
    Par défaut Merci
    Après quelques adaptations cela marche tres bien merci beaucoup.


  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Résolu ???????

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 32
    Par défaut Requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT CONVERT(CHAR(10), Date, 103) AS Jour,
            Region,
            COUNT(*) nNbOccurences
    FROM
    (
        SELECT date AS Date,
                SUBSTRING(nom_tournee, 1, 4) AS Region
        FROM dbo.passage
    ) SUB (Date, Region)
    GROUP BY CONVERT(CHAR(10), Date, 103), Region
    ORDER BY Date, Region
    Pour cette requete cela ne marche pas

    Pour l'autre tout est OK

    J'ai essayé de la faire marcher mais il ne reconnait pas SUB.
    Le probleme c'est que c'est cette requete qui m'interesse car je souhaite faire une vue et la vue ne peut pas contenir 'WITH'

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    WITH vous permet de créer une expression de table commune (ou CTE), c'est à dire une vue dont la durée de vie n'excède pas le temps d'exécution de l'instruction pour laquelle elle a été désignée.

    La sous-requête que j'ai appelé SUB en est une écriture différente mais consiste exactement en la même chose, ce qui explique pourquoi SQL Server vous refuse la création de la vue.

    Ce que vous pouvez faire, c'est créer une vue qui est la CTE / SUB, et la requêter directement

    @++

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

Discussions similaires

  1. Faire un select Count et sous requete?
    Par jojo86 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 29/06/2013, 23h27
  2. Sous requetes count : more than 1 row
    Par maximenet dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/05/2012, 14h25
  3. update avec sous requete count()
    Par gianni7033 dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/02/2011, 15h38
  4. COUNT(*) sur une sous requete
    Par knuck dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/09/2010, 17h17
  5. [debutant]sous-requetes COUNT(*) comme champs
    Par Romain93 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2007, 15h40

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