Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Profil pro Vincent NOURRY
    ARTISAN
    Inscrit en
    février 2012
    Messages
    17
    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 : 17
    Points : 4
    Points
    4

    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

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2009
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2009
    Messages : 460
    Points : 764
    Points
    764

    Par défaut

    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+

  3. #3
    Expert Confirmé
    Avatar de Ph. B.
    Homme Profil pro Philippe
    Freelance
    Inscrit en
    avril 2002
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 1 329
    Points : 3 994
    Points
    3 994

    Par défaut

    Bonjour,
    Pour la forme, la syntaxe est incorrecte comme le dit le message d'erreur:
    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.

  4. #4
    Invité de passage
    Profil pro Vincent NOURRY
    ARTISAN
    Inscrit en
    février 2012
    Messages
    17
    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 : 17
    Points : 4
    Points
    4

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •