Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours 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 07/12/2010, 12h50   #1
Invité de passage
 
Inscription : juin 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 14
Points : 0
Points : 0
Par défaut Restriction sur plusieurs valeurs

bonjour,

j'utilise cette requete au boulot pour tirer les chiffres. Je n'y connais rien en sql et je voudrais la modifier un peu :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT DISTINCT histo_ventes.cdpdt, SUM(histo_ventes.qtevendu) AS Somme, libpdt 
 
FROM histo_ventes
 
INNER JOIN produit ON histo_ventes.cdpdt = produit.cdpdt
 
WHERE dtvaleur BETWEEN '2010-12-01' AND '2010-12-03'
 
WHERE produit.cdfam BETWEEN '255' 
 
AND cdsite = 'LPA'
 
GROUP BY libpdt, histo_ventes.cdpdt
 
ORDER BY Somme DESC
en gros, je voudrais pouvoir tirer avec la meme requete plusieurs code famille (produit.cdfapm). La je peu tirer que la 255. comment faire pour tirer par exemple la 255, la 231 et la 273 ??

Par avance merci pour votre aide.
Svodoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 13h05   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Code :
produit.cdfam IN (255,231,273)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 13h10   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 974
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 974
Points : 18 216
Points : 18 216
Envoyer un message via MSN à CinePhil
DISTINCT + GROUP BY, on moins on est sûr que tu veux des valeurs distinctes avec ça !
=> Retire le DISTINCT inutile.

Il y a deux WHERE dans ta requête. Ça m'étonnerait qu'elle fonctionne en l'état !

Ce serait bien de préfixer toutes les colonnes utilisées, et de préférence avec un alias court, parce que les colonnes libpdt, dtvaleur et cdsite, on ne sait pas de quelle table elles viennent.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h39   #4
Invité de passage
 
Inscription : juin 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 14
Points : 0
Points : 0
Je viens de tester avec la modification mais la requete ne fonctionne pas :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT DISTINCT histo_ventes.cdpdt, SUM(histo_ventes.qtevendu) AS Somme, libpdt 
 
FROM histo_ventes
 
INNER JOIN produit ON histo_ventes.cdpdt = produit.cdpdt
 
WHERE dtvaleur BETWEEN '2010-12-01' AND '2010-12-03'
 
WHERE produit.cdfam IN (255,231,273)
 
AND cdsite = 'LPA'
 
GROUP BY libpdt, histo_ventes.cdpdt
 
ORDER BY Somme DESC
ca me met ca comme reponse :

Citation:
Server 'xx4', Line 1:
Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed. Use the CONVERT function to run this query.
Server Message: Number 257, Severity 16
Server 'xx4', Line 1:
Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed. Use the CONVERT function to run this query.
Svodoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h45   #5
Modérateur
 
Avatar de Chtulus
 
Homme Cédric
Cherche à comprendre
Inscription : avril 2008
Messages : 2 264
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Cherche à comprendre

Informations forums :
Inscription : avril 2008
Messages : 2 264
Points : 4 422
Points : 4 422
Envoyer un message via MSN à Chtulus Envoyer un message via Skype™ à Chtulus
Bonjour,

Citation:
Envoyé par CinePhil Voir le message
Il y a deux WHERE dans ta requête. Ça m'étonnerait qu'elle fonctionne en l'état !
Ce serait bien de lire quand les gens vous répondent

Auriez vous la DLL de création de la table ?

__________________
- De quelque manière qu'on s'y prenne on s'y prend toujours mal -
-Sigmund Freud-

Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
Tous les cours Office

Chtulus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 15h41   #6
Invité de passage
 
Inscription : juin 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 14
Points : 0
Points : 0
J'avais bien lu merci

La requête initiqle fonctionne très bien avec les 2 WHERE ...

Pour le reste je n'ai rien d'autre, je n'ai pas acces aux bases de données ou autres, j'utilise juste cette requete regulierement pour tirer mes ventes par codes familles.

Mais je dois la lancer pour chaque familles. Comme j)en ai 300, je voulais tout regrouper en une (ou plusieurs) fois.
Svodoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 16h07   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Si produit.cdfam est un varchar, il faut mettre les nombre entre quote :
Code :
produit.cdfam IN ('255','231','273')
Par contre c'est très étrange que la requête initiale fonctionne correctement.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 16h11   #8
Invité de passage
 
Inscription : juin 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 14
Points : 0
Points : 0
autant pour moi, je n'avais pas relu mon copier collé.

en effet il n'y a pas 2 WHERE, le second est en fait un AND.

désolé pour la boulette
Svodoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 17h11   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 974
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 974
Points : 18 216
Points : 18 216
Envoyer un message via MSN à CinePhil
Citation:
Mais je dois la lancer pour chaque familles. Comme j)en ai 300, je voulais tout regrouper en une (ou plusieurs) fois.
Pourquoi ne pas alors ajouter la famille dans le GROUP BY ?
Code :
1
2
3
4
5
6
7
8
SELECT p.cdfam, p.cdpdt, p.libpdt, 
    SUM(hv.qtevendu) AS Somme
FROM histo_ventes hv
INNER JOIN produit ON hv.cdpdt = p.cdpdt
WHERE hv.dtvaleur BETWEEN '2010-12-01' AND '2010-12-03'
    AND cdsite = 'LPA'
GROUP BY p.cdfam, p.cdpdt, p.libpdt
ORDER BY Somme DESC
Là vous aurez en principe la somme par famille et par produit.

Et selon votre SGBD, regardez du côté de ROLLUP ou CUBE pour avoir les totaux intermédiaires par catégorie. Ne l'ayant jamais utilisé, je ne m'aventure pas à vous proposer une syntaxe potentiellement fausse.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h41.


 
 
 
 
Partenaires

Hébergement Web