OVH Cloud OVH Cloud

création d'un requete

3 réponses
Avatar
Alva
salut à tous,

j'ai un fichier dans lequel j'enregistre les achats de matieres premieres
que j'effectue tout au long de l'année.
ce fichier est compose des champs suivant :
<date de commande : mois de commande : code : fournisseur : matiere premiere
: prix : quantite.>

je souhaite lister par fournisseurs les matieres premieres dont le prix a
changé avec les quantité commandées sur le prix et le moi du changement de
prix.

j'espere que je suis clair....

cordialement

Alva

3 réponses

Avatar
Fred BROUARD
bonjour,

quelques petites remarques :

1)
la notion de fichier n'existe pas dans un SGBDR, on parle de TABLE;
la notion d'enregistrement n'existe pas dans un SGBDR, on parle de LIGNE;
la notion de champs n'existe pas dans un SGBDR, on parle de COLONNE.
Lire à ce sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2


2)
il est dangereux d'utiliser des caractères non normatif dans des noms d'objet.
En particulier les espaces sont interdits et ne peuvent que contribuer à te
causer des ennuis.
Lire à ce sujet :
http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1


3)
ton modèle possède des information redondante :
"date de commande" et "mois de commande" la date incluant le mois il est
dangereux de conserver la colonne "mois de commande". Une simple extraction de
ce genre :
SELECT date de commande, DATEPART(MONTH, date de commande) AS MOIS_COMMANDE,
code, fournisseur, matiere premiere, prix, quantite
FROM MaTable
suffit

4)
ta queqtion est trop imprécise car rien n'indique qu'un pris doit avoir un seule
chagement au plus. Or s'il y a plusieurs changement de prix pour une même
matière d'un même fournisseur sur différents mois, quel mois dois-je afficher ?

SELECT fournisseur, matiere premiere, prix, quantite,
DATEPART(MONTH, date de commande) AS MOIS_COMMANDE
FROM MaTable T
WHERE EXISTS (SELECT *
FROM MaTable
WHERE T.matiere premiere = matiere premiere
AND T.fournisseur = fournisseur
AND T.prix <> prix)
ORDER BY 1, 2

5) si tu ne veut que le mois du précédent changement de prix, alors tu peut faire :

SELECT fournisseur, matiere premiere, prix, quantite,
DATEPART(MONTH, date de commande) AS MOIS_COMMANDE,
(SELECT MAX(DATEPART(MONTH, date de commande)
FROM MaTable
WHERE T.matiere premiere = matiere premiere
AND T.fournisseur = fournisseur
AND T.prix <> prix
AND T.date de commande > date de commande)
AS MOIS_COMMANDE_PRECEDENTE
FROM MaTable T
WHERE EXISTS (SELECT *
FROM MaTable
WHERE T.matiere premiere = matiere premiere
AND T.fournisseur = fournisseur
AND T.prix <> prix
AND T.date de commande > date de commande)

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Alva a écrit:
salut à tous,

j'ai un fichier dans lequel j'enregistre les achats de matieres premieres
que j'effectue tout au long de l'année.
ce fichier est compose des champs suivant :
<date de commande : mois de commande : code : fournisseur : matiere premiere
: prix : quantite.>

je souhaite lister par fournisseurs les matieres premieres dont le prix a
changé avec les quantité commandées sur le prix et le moi du changement de
prix.

j'espere que je suis clair....

cordialement

Alva




Avatar
Med Bouchenafa
Tu ne trouves pas que c'est un peu trop compliqué pour quelqu'un qui veut un
résultat...pourtant pas trop compliqué
Le petit SELECT suivant devrait lui donner ce qu'il recherche :

SELECT [Fournisseur],
[matiere premiere],
[prix],
MIN([mois de commande]),
SUM([quantite])
FROM NomTable
GROUP BY [Fournisseur],
[matiere premiere],
[prix]


--
Bien cordialement
Med Bouchenafa

"Fred BROUARD" a écrit dans le message de news:

bonjour,

quelques petites remarques :

1)
la notion de fichier n'existe pas dans un SGBDR, on parle de TABLE;
la notion d'enregistrement n'existe pas dans un SGBDR, on parle de LIGNE;
la notion de champs n'existe pas dans un SGBDR, on parle de COLONNE.
Lire à ce sujet : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2


2)
il est dangereux d'utiliser des caractères non normatif dans des noms
d'objet. En particulier les espaces sont interdits et ne peuvent que
contribuer à te causer des ennuis.
Lire à ce sujet :
http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1


3)
ton modèle possède des information redondante :
"date de commande" et "mois de commande" la date incluant le mois il est
dangereux de conserver la colonne "mois de commande". Une simple
extraction de ce genre :
SELECT date de commande, DATEPART(MONTH, date de commande) AS
MOIS_COMMANDE,
code, fournisseur, matiere premiere, prix, quantite
FROM MaTable
suffit

4)
ta queqtion est trop imprécise car rien n'indique qu'un pris doit avoir un
seule chagement au plus. Or s'il y a plusieurs changement de prix pour une
même matière d'un même fournisseur sur différents mois, quel mois dois-je
afficher ?

SELECT fournisseur, matiere premiere, prix, quantite,
DATEPART(MONTH, date de commande) AS MOIS_COMMANDE
FROM MaTable T
WHERE EXISTS (SELECT *
FROM MaTable
WHERE T.matiere premiere = matiere premiere
AND T.fournisseur = fournisseur
AND T.prix <> prix)
ORDER BY 1, 2

5) si tu ne veut que le mois du précédent changement de prix, alors tu
peut faire :

SELECT fournisseur, matiere premiere, prix, quantite,
DATEPART(MONTH, date de commande) AS MOIS_COMMANDE,
(SELECT MAX(DATEPART(MONTH, date de commande)
FROM MaTable
WHERE T.matiere premiere = matiere premiere
AND T.fournisseur = fournisseur
AND T.prix <> prix
AND T.date de commande > date de commande)
AS MOIS_COMMANDE_PRECEDENTE
FROM MaTable T
WHERE EXISTS (SELECT *
FROM MaTable
WHERE T.matiere premiere = matiere premiere
AND T.fournisseur = fournisseur
AND T.prix <> prix
AND T.date de commande > date de commande)

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Alva a écrit:
salut à tous,

j'ai un fichier dans lequel j'enregistre les achats de matieres premieres
que j'effectue tout au long de l'année.
ce fichier est compose des champs suivant :
<date de commande : mois de commande : code : fournisseur : matiere
premiere
: prix : quantite.>

je souhaite lister par fournisseurs les matieres premieres dont le prix a
changé avec les quantité commandées sur le prix et le moi du changement
de prix.

j'espere que je suis clair....

cordialement

Alva







Avatar
Fred BROUARD
et le changement de prix ???

Med Bouchenafa a écrit:
Tu ne trouves pas que c'est un peu trop compliqué pour quelqu'un qui veut un
résultat...pourtant pas trop compliqué
Le petit SELECT suivant devrait lui donner ce qu'il recherche :

SELECT [Fournisseur],
[matiere premiere],
[prix],
MIN([mois de commande]),
SUM([quantite])
FROM NomTable
GROUP BY [Fournisseur],
[matiere premiere],
[prix]





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************