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 :

Imbrication de SUM() et COUNT()


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut Imbrication de SUM() et COUNT()
    Bonjour tout le monde,

    Comme vous allez pouvoir le constater je ne suis pas vraiment un cador en SQL

    Tout d'abord ma requête :

    Code SQL : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    SELECT 
    	(SELECT SUM(
    		SELECT COUNT(DISTINCT TOPE.IDX_OPERATION) 
    		FROM TOPE 
    		LEFT JOIN TBL_ACTEURS TACT ON TOPE.IDX_ACTEUR = TACT.IDX_ACTEUR   
    		AND TACT.DAT_DEBUT_TRAITEMENTS > '2007-07-31' 
    		AND TACT.DAT_FIN_TRAITEMENTS < '2012-07-31' 
    		WHERE TOPE.INT_ORDRE > (SELECT INT_ORDRE  
    								FROM TBL_GROUPEMENTS_SCENARII  
    								WHERE IDX_TYPE_OPERATION = TOPE.IDX_TYPE_OPERATION 
    								AND FLG_MACHINE_DISPO = 1) 
    		)
    	FROM TBL_OPERATIONS TOPE
    	WHERE TOPE.IDX_TYPE_OPERATION IN (1,2,3)
    	)
     + 
    	(SELECT SUM(
    		SELECT COUNT(DISTINCT TOT.IDX_OPERATION) 
    		FROM TOT 
    		LEFT JOIN THO ON TOT.IDX_OPERATION = THO.IDX_OPERATION 
    		INNER JOIN TDO ON THO.STR_LIBELLE_OPERATION = TDO.STR_LIBELLE
    		AND TOT.DAT_DEBUT_TRAITEMENTS > '2007-07-31' 
    		AND TOT.DAT_FIN_TRAITEMENTS  < '2012-07-31' 
    		AND THO.FLG_VISIBLE_ARCHIVE = 1 
    		WHERE TOT.INT_ORDRE > (SELECT INT_ORDRE  
    								FROM TBL_GROUPEMENTS_SCENARII  
    								WHERE IDX_TYPE_OPERATION = TDO.IDX_TYPE_OPERATION   
    								AND FLG_MACHINE_DISPO = 1)
    		)
    	FROM TBL_OPERATIONS_TERMINATED TOT
    	LEFT JOIN TBL_HISTO_OPERATIONS THO ON TOT.IDX_OPERATION = THO.IDX_OPERATION 
    	INNER JOIN TBL_DEF_OPERATIONS TDO ON THO.STR_LIBELLE_OPERATION = TDO.STR_LIBELLE
    	WHERE TDO.IDX_TYPE_OPERATION IN (1,2,3)
    	)
     AS FLG_MD

    En gros je veux faire la somme de deux sommes (je suis clair ?)
    chaque requête est la somme d'un count() sur un interval donné et je veux donc que le count passe sur chaque entier de l'interval du sum()

    Erreur en sortie de requête :

    Msg*156, Niveau*15, État*1, Ligne*3
    Syntaxe incorrecte vers le mot clé 'SELECT'.
    Msg*102, Niveau*15, État*1, Ligne*12
    Syntaxe incorrecte vers ')'.
    Msg*156, Niveau*15, État*1, Ligne*18
    Syntaxe incorrecte vers le mot clé 'SELECT'.
    Msg*102, Niveau*15, État*1, Ligne*29
    Syntaxe incorrecte vers ')'.
    Donc en gros le select du count ne lui plaît pas ainsi que la parenthèse qui ferme chaque Sum()

    Les count marche très bien chacun de leur côté mais dés que je les mets dans le Sum() ça casse...

    Merci de m'éclairer de vos lumières

  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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		FROM	TBL_OPERATIONS TOPE
    		WHERE	TOPE.IDX_TYPE_OPERATION IN (1,2,3)
    L'alias de table TOPE n'est pas trouvé dans la sous-requête puisqu'il n'y est pas .
    Vous pouvez simplifier en plaçant cela dans la sous-requête, ce qui élimine la requête mère
    Vous avez fait la même erreur dans la deuxième requête.
    Je pense que vous pouvez donc réécrire comme suit :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    SELECT	(
    		SELECT	SUM
    			(
    				SELECT		COUNT(DISTINCT TOPE.IDX_OPERATION)
    				FROM		dbo.TBL_OPERATIONS AS TOPE
    				LEFT JOIN	dbo.TBL_ACTEURS AS TACT
    							ON TOPE.IDX_ACTEUR = TACT.IDX_ACTEUR
    							AND TACT.DAT_DEBUT_TRAITEMENTS > '2007-07-31'
    							AND TACT.DAT_FIN_TRAITEMENTS < '2012-07-31'
    				WHERE		TOPE.INT_ORDRE >
    						(
    							SELECT	INT_ORDRE
    							FROM	dbo.TBL_GROUPEMENTS_SCENARII
    							WHERE	IDX_TYPE_OPERATION = TOPE.IDX_TYPE_OPERATION
    							AND	FLG_MACHINE_DISPO = 1
    						)
    				AND		TOPE.IDX_TYPE_OPERATION BETWEEN 1 AND 3
    			)
    	)
    	+
    	(
    		SELECT	SUM
    			(
    				SELECT		COUNT(DISTINCT TOT.IDX_OPERATION)
    				FROM		dbo.TBL_OPERATIONS_TERMINATED AS TOT
    				LEFT JOIN	dbo.TBL_HISTO_OPERATIONS AS THO
    							ON TOT.IDX_OPERATION = THO.IDX_OPERATION
    							AND TOT.DAT_DEBUT_TRAITEMENTS > '2007-07-31'
    							AND TOT.DAT_FIN_TRAITEMENTS  < '2012-07-31'
    							AND THO.FLG_VISIBLE_ARCHIVE = 1
    				INNER JOIN	dbo.TBL_DEF_OPERATIONS AS TDO
    							ON THO.STR_LIBELLE_OPERATION = TDO.STR_LIBELLE
    				WHERE		TOT.INT_ORDRE >
    						(
    							SELECT	INT_ORDRE
    							FROM	dbo.TBL_GROUPEMENTS_SCENARII
    							WHERE	IDX_TYPE_OPERATION = TDO.IDX_TYPE_OPERATION
    							AND	FLG_MACHINE_DISPO = 1
    						)
    				AND		TDO.IDX_TYPE_OPERATION BETWEEN 1 AND 3
    			)
    	) AS FLG_MD
    @++

Discussions similaires

  1. SUM et COUNT 2 Fichiers
    Par Khalloud dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/12/2010, 18h58
  2. Group by Sum et count sur des objets
    Par soazig dans le forum Linq
    Réponses: 2
    Dernier message: 02/06/2010, 17h35
  3. Requete avec sum et count
    Par jcserre dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/06/2008, 12h01
  4. Aide sur Group by , sum et count
    Par rippoz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/06/2007, 15h48
  5. Sum et COUNT
    Par pmboutteau dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/10/2005, 15h28

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