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 05/08/2012, 22h45   #1
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 12
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 : 12
Points : 5
Points : 5
Par défaut [SQL] erreur sur WIHT JOIN

Bonjour,
je voulais faire une requête qui consiste à recupérer toutes les occurences qui ce répète plus de 4 fois dans les 6 derniers mois dans le journal de banque avec éventuellement un critère de montant j'ai donc fais cette requette:

Code :
1
2
3
4
5
6
WITH SELECTION AS (SELECT MAX(ID) FROM COMPTABILITE 
WHERE "DATE" BETWEEN 'debut' AND 'fin' AND JOURNAL LIKE 'BQ%' 
AND LEFT(NCOMTE, 1) = '4'
GROUP BY CREDIT HAVING Count(CREDIT) > 4 ) 
SELECT C.ID, C."DATE", C.NCOMTE, COALESCE(C.LIBCOMPTE, ''), COALESCE(C.LIBOPER, ''), COALESCE(C.NPIECE, ''), COALESCE(C.CREDIT, ''), COALESCE(C.DEBIT, '')
FROM COMPTABILITE C JOIN SELECTION S ON C.ID = S.ID
je sais déjà que "DATE" c'est pas bien...
que coalescence ces pas bien mais j'ai besoin d'une valeur non null
je fais ma requête dans une procédure VBA...

quand je lance la requête j'ai une erreur:

SQL error code = -104
Invalid command
no column name specified for column number 1 in derived table <unnamed>

si quelqu'un peu m'aider Grand MERCI
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2012, 08h16   #2
seabs
Membre chevronné
 
Inscription : janvier 2009
Messages : 395
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 395
Points : 633
Points : 633
Bonjour,

Une première remarque, pour éviter la multitude de COALESCE, il serait préférable de prévoir dans les colonnes de tes tables une valeur par défaut '' ou 0 suivant l'affectation de la colonne.

Pour ton code, il me semble nécessaire d'affecter MAX(id)

Code :
1
2
3
4
5
6
7
8
 
WITH SELECTION AS (SELECT MAX(ID) AS vId FROM COMPTABILITE 
WHERE "DATE" BETWEEN 'debut' AND 'fin' AND JOURNAL LIKE 'BQ%' 
AND LEFT(NCOMTE, 1) = '4'
GROUP BY CREDIT HAVING Count(CREDIT) > 4 ) 
SELECT C.ID, C."DATE", C.NCOMTE, COALESCE(C.LIBCOMPTE, ''), COALESCE(C.LIBOPER, ''), COALESCE(C.NPIECE, ''), 
    COALESCE(C.CREDIT, 0), COALESCE(C.DEBIT, 0)
FROM COMPTABILITE C JOIN SELECTION S ON C.ID = S.vID
La partie est-il utile dans ta requête ?

La modification suivant ne fonctionne pas ?

A+
seabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2012, 14h23   #3
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
Bonjour,
Pour la forme, la syntaxe est incorrecte comme le dit le message d'erreur:
Citation:
SQL error code = -104
Invalid command
no column name specified for column number 1 in derived table <unnamed>
Il faut définir les colonnes de l'expression CTE (Common Table Expression), c.a.d. :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
WITH SELECTION(ID) AS 
(
    SELECT 
      MAX(ID)
    FROM COMPTABILITE 
    WHERE "DATE" BETWEEN 'debut' AND 'fin' -- avec les bonnes expressions...
      AND JOURNAL LIKE 'BQ%' 
      AND LEFT(NCOMTE, 1) = '4'
      -- AND NCOMTE LIKE '4%' -- par souci d’homogénéité syntaxique
    GROUP BY CREDIT 
    HAVING COUNT(CREDIT) > 4 -- HAVING COUNT(*) > 4 -- valable aussi
) 
SELECT
  C.ID, 
  C."DATE", 
  C.NCOMTE, 
  COALESCE(C.LIBCOMPTE, ''), 
  COALESCE(C.LIBOPER, ''), 
  COALESCE(C.NPIECE, ''), 
  COALESCE(C.CREDIT, ''), 
  COALESCE(C.DEBIT, '')
FROM COMPTABILITE C 
JOIN SELECTION S ON C.ID = S.ID
Pour le fond, avec un jeu d'essai, c'eut été mieux et cela aurait complété l’énoncé :
Citation:
Envoyé par vience Voir le message
je voulais faire une requête qui consiste à recupérer toutes les occurences qui ce répète plus de 4 fois dans les 6 derniers mois dans le journal de banque avec éventuellement un critère de montant
--
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2012, 21h00   #4
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 12
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 : 12
Points : 5
Points : 5
Par défaut merci

merci a vous pour cette réponse.

en effet j'avais compris qu'il fallait mettre un nom a la colonne comme le disais le msg d’erreur mais je sais pas ou mettre ce nom...

en vous remerciant
vience 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 12h25.


 
 
 
 
Partenaires

Hébergement Web