Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 12h15   #1
Membre du Club
 
Inscription : mai 2009
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 171
Points : 53
Points : 53
Par défaut regroupement par trimestre

Bonjour à tous,

j'ai une table contenant par client le nombre d'articles vendus et le montant par date. je suis sous sql server 2008 R2?
Je voudrais simplement faire une requête qui me donne par client et article la somme des quantités et du montant par trimestre.

Je vois partout sur le net qu'il existe une fonction QUARTER(date) qui est censée me donner le numéro de trimestre. J'essaye donc de l'utiliser pour faire mes Sum et mon group by mais mon sql me dit que ce n'est pas une fonction sql intégrée ?

Sinon, comment puis je faire ma requête ? suis je obligé de faire un : case when month(date) = 1 then 1 when month(date) = 2 then 1 etc ... ou puis faire plus simplement ?

Merci de vos réponses.
cana13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h21   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

peux tu poster la requete que tu as faite ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h39   #3
Membre du Club
 
Inscription : mai 2009
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 171
Points : 53
Points : 53
Code :
1
2
3
4
5
6
7
8
9
 
SELECT [CODE_CLIENT], [NOM_CLIENT], [CODE_PRODUIT], [LIBELLE_PRODUIT],
       QUARTER(DATE) AS TRIMESTRE, SUM(MONTANT) AS MONTANT, SUM(QUANTITE) AS QUANTITE
 
FROM   [dbo].[VENTE] 
 
WHERE  YEAR(DATE) = '2010' 
 
GROUP BY [CODE_CLIENT], [NOM_CLIENT], [CODE_PRODUIT], [LIBELLE_PRODUIT], QUARTER(DATE)
cana13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h55   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 665
Points : 8 710
Points : 8 710
Bonjour,

Supposons que votre table soit structurée de cette façon : client_id nb_articles date.

La requête est alors :

Code :
1
2
3
4
5
6
SELECT	client_id
	, SUM(nb_articles_vendus) AS total_articles_vendus
	, DATEPART(quarter, date) AS trimestre
FROM	dbo.maTable
WHERE	date BETWEEN '20100101' AND '20101231'
GROUP	BY client_id, DATEPART(quarter, date)
Notez que vous pouvez la rentre plus rapide en spécifiant une colonne calculée qui extrait automatiquement le trimestre :

Code :
1
2
ALTER TABLE dbo.maTable
ADD trimestre AS (DATEPART(quarter, date)) PERSISTED NOT NULL
Vous pouvez ensuite créer un index sur cette colonne pour couvrir votre requête :

Code :
1
2
CREATE INDEX IXNCmaTable_trimestre
ON maTable(client_id, nb_articles_vendus, trimestre)
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 13h31   #5
Membre du Club
 
Inscription : mai 2009
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 171
Points : 53
Points : 53
super ! merci et bonne journée.
cana13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h38.


 
 
 
 
Partenaires

Hébergement Web