Précédent   Forum du club des développeurs et IT Pro > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/05/2012, 14h07   #1
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 16
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 16
Points : 5
Points : 5
Par défaut select * from compta where sum = variable

Bonjour,

je m’explique:

je recherche tous les enregitrements de ma base de donnée compta si la somme (goupé par piece) du debit ou du credit est egale a ma variable

je suis parti sur:
Code :
1
2
3
4
5
6
7
8
9
SELECT ID, ""DATE"", NCOMTE, COALESCE(LIBCOMPTE, ''), JOURNAL, COALESCE(NPIECE, ''), COALESCE(LIBOPER, ''),COALESCE(CREDIT, ''), COALESCE(DEBIT, '') 
 
FROM COMPTABILITE 
 
GROUP BY ""DATE"", NCOMTE, LIBCOMPTE, NPIECE, CREDIT, DEBIT
 
HAVING ""DATE"" BETWEEN DATE1 AND date2
 
 AND SUM(CREDIT) = VARIABLE OR SUM(DEBIT)  = VARIABLE
est il possible de trouver cette requete?
Quelqu'un a une idée?
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2012, 15h08   #2
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 946
Points : 9 946
Bonjour

Bon c'est pas gagné là ! Cette requête ne s'exécute certainement pas.
Il me semble qu'il vous manque quelques notions de base du SQL. Cette remarque n'est pas un reproche bien entendu.

Il existe sur la toile des tonnes d'articles et de tutoriels sur ce sujet. Donc...

La requête (construite à la volée, sans test) pourrait être:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  C1.*
FROM
  COMPTABILITE C1
WHERE EXISTS (
  SELECT C2.ID, C2.NPIECE
  FROM COMPTABILITE C2
  WHERE
    C1.ID = C2.ID AND
    C2.MA_DATE BETWEEN :DATE1 AND :DATE2
  GROUP BY
    C2.ID,
    C2.NPIECE
  HAVING 
    SUM(C2.CREDIT) = :VALEUR OR SUM(C2.DEBIT) = :VALEUR
)
Je ramène toutes les colonnes de la table, à vous de sélectionner celles pertinentes.
Vos COALESCE(F, '') me semble inutiles.
Et enfin nommer une colonne DATE est à proscrire absolument, DATE est un mot-clé réservé du SQL.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2012, 18h01   #3
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 16
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 16
Points : 5
Points : 5
merci pour cette reponse rapide et desoler pour mon sql...
je suis pas informatien je suis couvreur

j'ai test la commande, elle marche mais elle ne retourne pas tout ce que je chercher:

exemple

piece debit credit
a1 4.75
a1 25.25
a1 30

je voudrai que ca me retourne les trois ligne car 4.75+25.25 = 30 et 30 = 30
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2012, 18h36   #4
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 946
Points : 9 946
Citation:
Envoyé par vience Voir le message
merci pour cette reponse rapide et desoler pour mon sql...
je suis pas informatien je suis couvreur
Raison de plus pour ne pas être désolé. Et pour inverser les rôles je me vois mal grimper sur mon toit en ardoise.

Reprenons.
Citation:
Envoyé par vience Voir le message
j'ai test la commande, elle marche mais elle ne retourne pas tout ce que je chercher
En théorie cette requête devrait vous renvoyer toutes les lignes.
Je ne suis pas sûr de bien comprendre votre besoin.

@+ Claudius.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2012, 18h44   #5
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 270
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 270
Points : 7 530
Points : 7 530
Comme je préfère les CTE (cela dépend de la version de Firebird)

Code :
1
2
3
4
5
6
7
8
9
10
11
WITH SELECTION AS ( SELECT NPIECE
  FROM COMPTABILITE
  WHERE
    MA_DATE BETWEEN :DATE1 AND :DATE2
  GROUP BY   NPIECE
  HAVING 
    SUM(CREDIT) = :VALEUR OR SUM(DEBIT) = :VALEUR
 )
 
SELECT C.* FROM COMPTABILITE C JOIN SELECTION S ON 
C.NPIECE=S.NPIECE
mais cela équivaut quasi au code de Cl@udius la seule différence est en fait dans la liaison entre C1 et C2 , Cl@udius l'a proposé sur l'id de l'écriture au lieu de la pièce donc le même code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
  C1.*
FROM
  COMPTABILITE C1
WHERE EXISTS (
  SELECT C2.NPIECE
  FROM COMPTABILITE C2
  WHERE
    C1.NPIECE = C2.NPIECE AND
    C2.MA_DATE BETWEEN :DATE1 AND :DATE2
  GROUP BY
    C2.NPIECE
  HAVING 
    SUM(C2.CREDIT) = :VALEUR OR SUM(C2.DEBIT) = :VALEUR
)
@Cl@udius non seulement tu n'es pas couvreur mais comme ton serviteur tu sembles porter à la 'com'ptabilité un intérêt d'informaticien
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/05/2012, 20h14   #6
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 16
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 16
Points : 5
Points : 5
merci SergioMaster

la première solution fonctionne parfaitement!

j'espère que je vais pourvoir retrouver toute mes opérations!!!

et encore merci a vous deux
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2012, 20h19   #7
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 946
Points : 9 946
Citation:
Envoyé par vience Voir le message
la première solution fonctionne parfaitement!
...
et encore merci a vous deux
Super

@+

@Serge
Citation:
@Cl@udius non seulement tu n'es pas couvreur mais comme ton serviteur tu sembles porter à la 'com'ptabilité un intérêt d'informaticien
Tout ce qui couvre l'informatique m'intéresse.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h19.


 
 
 
 
Partenaires

Hébergement Web