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

MS SQL Server Discussion :

COUNT sans GROUP BY


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut COUNT sans GROUP BY
    Bonjour,

    J'ai une requête avec jointure(LEFT JOIN) me retourne ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    id	idGroupe	nom
    14	7		a
    7	5		test
    17	5		test
    12	5		test
    16	5		test
    18	6		test_sans article
    13	6		test_sans article
    J'aimerai avoir le nombre de ligne par idGroupe sans faire de GROUP BY.

    Comme cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    id	idGroupe	nom				nombre
    14	7		a				1
    7	5		test				4
    17	5		test				4
    12	5		test				4
    16	5		test				4
    18	6		test_sans article		2
    13	6		test_sans article		2
    Merci .

  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 : 43
    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,

    Si vous êtes sous SQL Server 2005 ou plus, vous pouvez écrire une expression de table commune pour le calculer puis joindre celle-ci à votre requête.
    Sans votre requête nous ne pouvons pas vous aider plus ...

    @++

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    SQL Server 2003

    Comment faire? Une vue?

  4. #4
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    SQL Server 2003 n'existe pas
    C'est soit du 2000 soit 2005, apr contre ça doit être un windows server 2003.

    Ce qu'il nous faudrait c'est la structure de vos tables (script de création) et également le script de votre requête actuelle.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    Autant pour moi, pas concentré, version 2000.

    Extrait de la table nom_groupe_articles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_nom_groupe	nom_groupe	etat_groupe	
    	1		test			1
    	2		test2			1
    	3		test3			1

    Extrait de la table nom_liaison_groupe_articles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id_groupe_article		id_groupe	id_RefArticle	etat
    	1				1		14		1
    	2				1		554		1
    	3				3		4487		0
    	4				2		121		0

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id_groupe_article, id_nom_groupe, nom_groupe, REF, etat_groupe, etat
    FROM nom_groupe_articles
    LEFT JOIN nom_liaison_groupe_article ON nom_groupe_articles.id_nom_groupe = nom_liaison_groupe_article.id_groupe
    LEFT JOIN master ON master.id= nom_liaison_groupe_article.id_RefArticle
    ORDER BY nom_groupe_articles.nom_groupe, REF

  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 : 43
    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
    Essayez :

    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
    25
    SELECT NLGA.id_groupe_article,
    		NGA.id_nom_groupe,
    		NGA.nom_groupe,
    		REF,
    		NGA.etat_groupe,
    		NLGA.etat,
    		SUB.nNbArticles
    FROM dbo.nom_groupe_articles AS NGA
    LEFT JOIN dbo.nom_liaison_groupe_article AS NLGA 
    	ON GA.id_nom_groupe = NLGA.id_groupe
    LEFT JOIN dbo.master AS M 
    	ON M.id = NLGA.id_RefArticle
    LEFT JOIN
    	(
    		SELECT NLGA.id_groupe_article,
    				COUNT(*) AS nNbArticles
    		FROM dbo.nom_groupe_articles AS NGA
    		LEFT JOIN dbo.nom_liaison_groupe_article AS NLGA 
    			ON GA.id_nom_groupe = NLGA.id_groupe
    		LEFT JOIN dbo.master AS M 
    			ON M.id = NLGA.id_RefArticle
    		GROUP BY NLGA.id_groupe_article
    	) AS SUB (id_groupe_article, nNbArticles)
    ON SUB.id_groupe_article = NLGA.id_groupe_article
    ORDER BY NGA.nom_groupe, REF
    Quelques règles pour faciliter le travail de l'optimiseur :

    - qualifiez vos objets (tables, fonctions, procédures stockées, vues) avec le nom du schéma auquel ils appartiennent. Pour voir les effets de ne pas le faire, c'est par ici
    - qualifiez le nom de vos colonnes dans vos SELECT avec le nom de la table (ou son alias) à laquelle elles appartiennent

    L'idée de fait une vue n'est pas mauvaise du tout, en reprenant la sous-requête de la requête que je vous ai proposée

    @++

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    Citation Envoyé par afrodje Voir le message
    Autant pour moi, pas concentré, version 2000.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Si vous êtes sous SQL Server 2005 ou plus, vous pouvez écrire une expression de table commune pour le calculer puis joindre celle-ci à votre requête.
    Un simple count(*) over(partition by ...) suffira !

  9. #9
    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 : 43
    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
    Exact, bien vu

    @++

Discussions similaires

  1. Comment faire un Count() sans un group by interminable ?
    Par olibara dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 14/08/2009, 17h09
  2. Réponses: 7
    Dernier message: 02/02/2009, 20h04
  3. un COUNT sans GROUP BY
    Par Ekinoks dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/12/2007, 23h38
  4. Requête récalcitrante avec un tri par COUNT sans GROUP BY
    Par Ancalagon77 dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/10/2006, 14h27
  5. Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Par vanquish dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 09h45

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