Soustraction de résultats de deux requettes

Fermé
filoulebauju - 1 avril 2008 à 14:23
 filoulebauju - 1 avril 2008 à 15:39
Bonjour,

Je voudrais savoir si il était possible de réaliser une soustraction à partir de résultats d'autre requetes.

Voici mes requetes:
Requete1:
SELECT ROUND(Sum(expr1),2) AS Expr2
FROM (SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneFacture
WHERE (((Year([DateDocument]))=YEAR(now)-2)
AND ((Month([DateDocument]))=1))

Union

SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneRecapCaisse
WHERE (((Year([DateDocument]))=YEAR(now)-2)
AND ((Month([DateDocument]))=1))
) AS [%$##@_Alias];

Requete2:
SELECT ROUND(Sum(expr1),2) AS Expr2
FROM (SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneFacture
WHERE (((Year([DateDocument]))=YEAR(now)-1)
AND ((Month([DateDocument]))=1))

Union

SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneRecapCaisse
WHERE (((Year([DateDocument]))=YEAR(now)-1)
AND ((Month([DateDocument]))=1))
) AS [%$##@_Alias];


Je voudrais savoir si il y avait un opérateur tel que UNION pour la soustraction.

Merci d'avance.

4 réponses

pavarotti_39 Messages postés 364 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 3 mai 2008 62
1 avril 2008 à 15:21
Vous êtes excusés, faute avouée à moitié pardonnée.

Dans ce cas, ce n'est pas UNION et MINUS qu'il faut utiliser, mais dans une même requête effectuer le calcul.

Select (sum(Requête 1.1)+Select sum(Requête1.2)) - (sum(Requête 2.1)+Select sum(Requête2.2) )
From TheTable where gnagnagna;
2
Merci mais le soucis est que les requêtes s'établissent sur 2 tables différentes qui n'ont pas de relations entre elles (d'où les UNION).

étant en stage, je ne peux modifier la base mais seulement m'adapter à celle-ci et sans relation, le moindre opérateur devient un calvaire.

Je vous remercie de votre aide et si ce n'est pas trop vous demander, pouriez vous m'aider encore un tout petit peu . :d
0
pavarotti_39 Messages postés 364 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 3 mai 2008 62 > filoulebauju
1 avril 2008 à 15:35
Créez une fonction ou une procédure stockée qui retourne sum(machin) + sum(bidule) - (sum (machin)+sum(bidule)

Access supporte bien ceci, non ?
0
filoulebauju > pavarotti_39 Messages postés 364 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 3 mai 2008
1 avril 2008 à 15:39
Je dois malheureusement avouer que je n'en ai aucune idée.

Merci beaucoup en tout cas.
0
pavarotti_39 Messages postés 364 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 3 mai 2008 62
1 avril 2008 à 14:26
Bien sûr, un tel opérateur existe, il s'agit de Minus du célèbre duo Minus et Cortex.
0
Merci mais peux tu me donner un exemple avec mon problème stp?
0
filoulebauju > filoulebauju
1 avril 2008 à 14:42
J'ai oublié de préciser que c'était pour access.

Je ne sais pas si il acceptele MINUS...
0
pavarotti_39 Messages postés 364 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 3 mai 2008 62
1 avril 2008 à 14:59
"Merci mais peux tu me donner un exemple avec mon problème stp?"

On n'est pas chez mémé, ici, nous sommes entre gentilshommes. Un peu plus de courtoisie, s'il vous plaît.

Donc pour votre requête, je ne sais pas exactement ce que vous souhaitez faire, puisque le UNION sert à rajouter les résultats de la deuxième requête à la première, tandis que le MINUS sert à effacer de la première requête les résultats de la seconde. Pour savoir si Access supporte le Minus, ne sous-estimez pas son aide, elle peut se montrer plus utile en SQL que l'on ne peut se l'imaginer.

Si j'ai bien compris, vous désirez faire Requête2 MINUS Requête1;

(SELECT ROUND(Sum(expr1),2) AS Expr2
FROM (SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneFacture
WHERE (((Year([DateDocument]))=YEAR(now)-2)
AND ((Month([DateDocument]))=1))

Union

SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneRecapCaisse
WHERE (((Year([DateDocument]))=YEAR(now)-2)
AND ((Month([DateDocument]))=1))
) AS [%$##@_Alias]; )

MINUS

(SELECT ROUND(Sum(expr1),2) AS Expr2
FROM (SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneFacture
WHERE (((Year([DateDocument]))=YEAR(now)-1)
AND ((Month([DateDocument]))=1))

Union

SELECT Sum(TotalLigneHT) as expr1
FROM BIO_LigneRecapCaisse
WHERE (((Year([DateDocument]))=YEAR(now)-1)
AND ((Month([DateDocument]))=1))
) AS [%$##@_Alias];)

Cependant, si c'est la soustraction des résultats des sommes que vous désirez, vous devrez le faire en une seule requête.
0
Désolé pour le manque de courtoisie.

Merci pour votre aide mais malheureusement, au moment de la compilation, il m'affiche "erreur de syntaxe dans la requete UNION".

Pour une meilleure vision de mon problème,

ma requete1 retourne 15 et ma requete2 retourne 12 (ceci un éxemple)
Je voudrai que la troisième requete me sorte 3, la soustraction du résultat des deux précédentes.

Merci de votre aide
0
pavarotti_39 Messages postés 364 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 3 mai 2008 62
1 avril 2008 à 15:21
Vous êtes excusés, fautes avouée à moitié pardonnée.

Dans ce cas, ce n'est pas UNION et MINUS qu'il faut utiliser, mais dans une même requête effectuer le calcul.

Select (sum(Requête 1.1)+Select sum(Requête1.2)) - (sum(Requête 2.1)+Select sum(Requête2.2) )
From TheTable where gnagnagna;
0