aide pour une requete svp - SQL/NoSQL - Programmation
Marsh Posté le 25-02-2005 à 14:28:32
et voila une infos deja, ligneH+ligneB et ligne permettent de lier les enregistrement des table pour pouvoir retrouver le prix de l'achat refusé.
donc un enreg. de la table Retirer correspond toujours a un enreg. de la table Total dans laquel se trouve les prix.
olala ca va etre dur...
Marsh Posté le 25-02-2005 à 14:51:24
Quel SGBD ?
Tu veux qu'on te fasse tout ton exo ou quoi ?
J'ai pas trop compris ton 2ème message ...
Si le SGBD permet les sous requêtes c'est trivial.
Il suffit de faire une jointure externe entre la 1ère requête et la seconde (jointure externe car la seconde requête ne renvoie pas forcément d'infos pour chaque numéro). La jointure se fait bien sur sur le numéro, élément commun des 2 requêtes.
Marsh Posté le 25-02-2005 à 15:01:33
Beegee a écrit : Quel SGBD ? |
ouep l'idée ce serait un truc dans ce goût là. Il suffirait d'utiliser un LEFT JOIN sous SQL Server pour rejoindre les tables même si il n'y pas de montantRetirer pour certains numéros. Tu vas te retrouver avec un truc du genre :
Numero index montant montantRetirer
35 050123500013 196,800000190735 NULL
32 050123200020 723,910004138947 44,0499992370605
28 050122800094 252891,239608841 3626,94997048378
06 050120600016 135,199998244643 NULL
16 050121600025 371,180003643036 NULL
26 050122600034 18447,18978706 318,890000343323
30 050123000057 119537,17980618 1606,89999461174
Ensuite il faudrait utiliser la fonction coalesce qui te retourne le premier élément non null dans une liste : coalesce(SUM(a.Somme),0) As montantRetirer .
Voilà l'idée générale c'est ça après c'est évidemment difficile à écrire quand on ne connait pas bien le contenu des tables et la structure de la base. Mais pour toi hep8 ce sera du gâteau .
Marsh Posté le 25-02-2005 à 15:05:38
sgbd : sqlserver
exo : ??? c quoi ca?
2eme msg : juste pour expliqué a quoi servent les champs ligne, c'est grace a eux qu'on peut savoir le prix de l'achat qui est mentioné dans 'Retirer' et donc faire la colonne 'montantRetire'.
Je vais voir ca pour la jointure externe, c'est p-e ce qu'il me faut, et ca oriente mes recherches. Merci de ta reponse!
Marsh Posté le 25-02-2005 à 15:07:33
merci aussi Yonel je vais voir c que je peux faire de tous ca
Marsh Posté le 25-02-2005 à 14:20:27
J'ai besoin d'aide pour ne faire qu'une seul requete des deux suivante. Voici mon objectif et les info necessaire, j en ai p-e oublié mais demander les moi!
Pour une firme donnée, a une periode donnée (ici firm 2 periode 200501)
donner par numero, l'index, le montant total, et le montant a soustraire.
la table 'Total' contient des enregistrements d'achats, la deuxieme, 'Retirer', contient les achats qui ont ete refusé.
la premiere requete me permet de retrouvé le montant total des achats
la second permet de retrouver le montant total refusé
Mais comment n'en faire qu'une seul?
(type = type d'enregistrement, pour plusieur type 'detail', correspondent des 'SousTotal', pour le total, faut additionner soit les un, soit les autres...
Il y a donc plusieur numero fixe par firme et un index par numero par periode
travail sous sqlserver, et la requete est a glisser dans du code c#
si il vous faut plus d'info...)
SELECT Numero AS Numero, id1 + id2 AS index, SUM(Somme) AS montant
FROM Total T1
WHERE (Firme = 2) AND (type = 'SousTotal') AND (periode = 200501)
GROUP BY Numero, id1 + id2
Numero index montant
35 050123500013 196,800000190735
32 050123200020 723,910004138947
28 050122800094 252891,239608841
06 050120600016 135,199998244643
16 050121600025 371,180003643036
26 050122600034 18447,18978706
30 050123000057 119537,17980618
+
SELECT SUM(a.Somme) AS montantRetirer, a.Numero AS Numero
FROM Total a INNER JOIN
Retirer b ON a.ligneH * 10 + a.ligneB = b.ligne AND a.Firme = b.Firme AND a.periode = b.periode AND b.type = 40
WHERE (a.Firme = 2) AND (a.periode = 200501) AND (a.type = 'detail')
GROUP BY a.Numero
montantRetirer Numero
318,890000343323 26
3626,94997048378 28
1606,89999461174 30
44,0499992370605 32
= -----------------------------------
ce que je voudrais:
Numero index montant montantRetirer
35 050123500013 196,800000190735 0
32 050123200020 723,910004138947 44,0499992370605
28 050122800094 252891,239608841 3626,94997048378
06 050120600016 135,199998244643 0
16 050121600025 371,180003643036 0
26 050122600034 18447,18978706 318,890000343323
30 050123000057 119537,17980618 1606,89999461174
Merci d'avance !