IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

SQL CASE WHEN THEN


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut SQL CASE WHEN THEN
    Bonjour

    j'ai crée un champ calculé [STOCK] et j'aimerais savoir comment faire pour créer un champs ' Observations' avec la méthode CASE WHEN THEN
    exemple sur ma base : AbsolueDataBase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT
    ........
    ......
    sum(E.Qte_e-S.Qte_s) AS Stock
    CASE WHEN STOCK > Seuil THEN 'Suffisant'
    END AS Observations 
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    elle déclenche un message d"erreur
    merci pour toutes aide

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    bonjour, outre le fait que ce ne soit pas vraiment une question Delphi, il manque le moteur BDD utilisé et éventuellement le message d'erreur
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    bonjour, outre le fait que ce ne soit pas vraiment une question Delphi, il manque le moteur BDD utilisé et éventuellement le message d'erreur
    j’utilise Absolute database .abs

    le message d'erreur : [18/11/2021 08:09:02] End of SQL command expected, but 'CASE' found at line 7, column 1 - Native error: 20260

    merci de si vite réponse
    NB : Si c'est possible de transférer le post vers (SGBD SQL)

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je n'appelle pas ça vraiment une colonne calculée, il s'agit d'un agrégat et cela ne pourra pas fonctionner (en plus il manque un GROUP BY quelque part)

    Si absolutedatabase peut utiliser les CTE cela peut se résoudre en

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    WITH C AS (SELECT
    ........
    ......
    sum(E.Qte_e-S.Qte_s) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P)
    GROUP BY ...... )
     
    SELECT C.*, CASE WHEN C.STOCK > C.Seuil THEN 'Suffisant'
    END AS Observations 
    FROM C

    Sinon un SELECT imbriqué est peut-être possible
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT ....,CASE WHEN STOCK > Seuil THEN 'Suffisant'
    END AS Observations  FROM (SELECT ........
    ......
    sum(E.Qte_e-S.Qte_s) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P)
    GROUP BY ......)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    j’utilise Absolute database .abs
    Si c'est possible de transférer le post vers (SGBD SQL)
    Je pourrai le faire bien entendu mais je ne suis pas sûr que cela serait "malin", Absolute Database n'a pas de forum spécifique et le forum https://www.developpez.net/forums/f3...s/langage-sql/ est très/trop généraliste
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Bonjour
    d’après ce que j'ai lit absolutedatabase ne support pas les CTE .
    je vais tester votre SELECT imbriqué

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    voila ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    SELECT T.CDP_P, T.Produits,T.Seuil,
    CASE WHEN STOCK > Seuil THEN 'Suffisant'
    END AS Observations  
    FROM (SELECTT.CDP_P, T.Produits,T.Seuil,
      SUM(E.Qte_e) AS QTE,
      SUM(S.Qte_s) AS QTS,
      sum(E.Qte_e-S.Qte_s) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil)
    est le message d"erreur ([18/11/2021 08:46:02] End of SQL command expected, but '(' found at line 5, column 6 - Native error: 20260)

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Re,
    Je me suis souvenu qu'effectivement Absolute Database n'est qu'une sorte paradox déguisé, seul avantage pas de BDE à déployer.
    Et donc plus un set de composants qu'un SGBD sensu stricto, la réflexion de Paul tombe donc un peu à l'eau
    Donc, si je devais déplacer le post, ce serait plutôt vers https://www.developpez.net/forums/f1...-sgbd/paradox/ et celui-ci est tellement peu fréquenté que la réponse risque d'être longue !



    Déjà je note une petite erreur ligne 6 FROM (SELECT T.CDP_P, T.Produits,T.Seuil, il manque un espace entre SELECT et T.CDP_P

    j'ai ensuite plusieurs solutions possibles en réserve (surtout maintenant que le SQL est plus complet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(E.Qte_e) AS QTE,
      SUM(S.Qte_s) AS QTS,
      sum(E.Qte_e-S.Qte_s) AS Stock,
      CASE WHEN  sum(E.Qte_e-S.Qte_s)>T.SEUIL THEN 'Suffisant' END OBSERVATIONS
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil

    - Comme on le faisait avec Paradox, l'utilisation d'un fichier .SQL (au même endroit que les tables) ce qui devient un équivalent CTE
    Citation Envoyé par requete.sql
    SELECT T.CDP_P, T.Produits,T.Seuil,
    SUM(E.Qte_e) AS QTE,
    SUM(S.Qte_s) AS QTS,
    sum(E.Qte_e-S.Qte_s) AS Stock
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil
    et une requête du genre (* il faut peut-être mettre le nom du fichier SQL entre guillemets)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CDP_P,Produits,Seuil,qte,qts,stock,case WHEN Stock>Seuil then 'suffisant' END Observations FROM requete.SQL

    - l'utilisation d'une UNION (plus long car deux requêtes sur les tables)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(E.Qte_e) AS QTE,
      SUM(S.Qte_s) AS QTS,
      sum(E.Qte_e-S.Qte_s) AS Stock,
      MAX('suffisant') OBSERVATIONS 
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil
    HAVING sum(E.Qte_e-S.Qte_s)>T.SEUIL 
    UNION
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(E.Qte_e) AS QTE,
      SUM(S.Qte_s) AS QTS,
      sum(E.Qte_e-S.Qte_s) AS Stock,
      MAX('')
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil
    HAVING sum(E.Qte_e-S.Qte_s)<=T.SEUIL

    Enfin, j'ai encore quelques reserves niveau des agregats, quid si il n'y a pas de mouvements d'entrées ou de sorties (donc QTE_E=NULL ou QTE_S=NULL) ?
    Avec d'autres SGBD j'utiliserai un COALESCE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(COALESCE(E.Qte_e,0)) AS QTE,
      SUM(COALESCE(S.Qte_s,0)) AS QTS,
      sum(COALESCE(E.Qte_e,0) - COALESCE(S.Qte_s,0)) AS Stock,
    ....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    sinon il est toujours possible d'utiliser un "Champ calculé", au sens Delphi du terme
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Sauf que là tu nous montres Firedac alors que je pense que les composants utilisés sont des TAbsxxxxx (encore une chose non indiquée)
    je pense plutôt aux champs calculés tel que dans cet exemple ce qui serait aussi une solution très Delphi "old school"

    NB. en relisant le premier post (et son utilisation AMHA indue du terme de "champ calculé") je viens de relever une autre erreur dans le SQL : le manque d'une virgule (entre Stock et CASE)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sum(E.Qte_e-S.Qte_s) AS Stock,
    CASE WHEN STOCK > Seuil THEN 'Suffisant'
    END AS Observations
    cause de l'erreur primordiale
    [18/11/2021 08:09:02] End of SQL command expected, but 'CASE' found at line 7, column 1 - Native error: 20260
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Je pense qu'il manque le ELSE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sum(E.Qte_e-S.Qte_s) AS Stock,
    CASE WHEN STOCK > Seuil THEN 'Suffisant'
    ELSE 'Insuffisant'
    END AS Observations

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    la fonction case du SQL si c'est la même que SqlAdvantage de Sybase n'est pas un agrégat mais un test logique

    la syntaxe est celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE mavalu WHEN MaValeurCondition  THEN MonResultatVrai ELSE MonResultatFaux END
    Si la condition n'est pas une égalité parfaite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE  WHEN mavalu MaCondition MaValeurCondition  THEN MonResultatVrai ELSE MonResultatFaux END
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Alors :
    @Onedev et @Anapurna
    - je ne suis pas sûr que le ELSE soit obligatoire. (en contre exemple de SqlAdvantage, Firebird). En tout cas, si comme il est indiqué, Absolute Database respecte ANSI SQL 92 alors dans les spécifcations SQL 92 la sysntaxe est
    <simple case> ::=
    CASE <case operand>
    <simple when clause>...
    [ <else clause> ]
    END

    <simple when clause> ::= WHEN <when operand> THEN <result>

    <searched when clause> ::= WHEN <search condition> THEN <result>

    <else clause> ::= ELSE <result>
    La cluse else est bien optionnelle

    @Anapurna
    - je n'ai jamais parlé d'agrégat pour ce qui est du CASE si ce n'est que le test est fait sur un agrégat aliasé STOCK

    De toute façon, dans les deux SQL fournis par MIWAN il y avait des erreurs de syntaxe une virgule manquante dans le premier, un espace manquant dans le second. Peut-être est-ce une erreur de transcription dans le second, mais pour ce qui est du premier l'erreur coorespond bien à cette lacune
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Re,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.CDP_P, T.Produits,T.Seuil,
      SUM(E.Qte_e) AS QTE,
      SUM(S.Qte_s) AS QTS,
      sum(E.Qte_e-S.Qte_s) AS Stock,
      CASE WHEN  sum(E.Qte_e-S.Qte_s)>T.SEUIL THEN 'Suffisant' END OBSERVATIONS
    FROM TProduits T
    LEFT JOIN TEntrees E ON E.CD_PE = T.CDP_P
    LEFT JOIN Tsorties S ON S.CD_PS = T.CDP_P
    GROUP BY T.CDP_P, T.Produits,T.Seuil
    je ne sais quoi dire sauf merci infiniment pour vous +( paul TOTH, anapurna, oneDey ).

    absolute dataBase n'a pas besoin de BDE à déployer c'est la raison que j'ai migré vers elle on quittant ms Access qu'il n'est pas votre tasse de Thé

    Merci encore de m'avoir fait attention + C'EST Résolu

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    je ne sais quoi dire sauf merci infiniment
    Je ne cracherai pas sur un petit (a minima sur le post avec la solution retenue), je ne suis pas à la chasse au points forum mais cela aidera de futurs chercheurs

    Citation Envoyé par MIWAN Voir le message
    absolute dataBase n'a pas besoin de BDE à déployer c'est la raison que j'ai migré vers elle en quittant ms Access qu'il n'est pas votre tasse de Thé
    C'est vrai que MS Access n'est pas ma tasse de thé mais Paradox que j'ai beaucoup pratiqué est quelque peu obsolète aussi (disons su thé passé de date)
    Allez voir du côté de vrai SGBDR comme SQLite (pour un équivalent monoposte), PostGres ou (mon préféré) Firebird vous entrerez alors dans une nouvelle dimension.

    Pensez aux COALESCE car j'ai vraiment un gros doute
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    Citation Envoyé par SergioMaster Voir le message
    Alors :
    @Onedev et @Anapurna
    - je ne suis pas sûr que le ELSE soit obligatoire. (en contre exemple de SqlAdvantage, Firebird). En tout cas, si comme il est indiqué, Absolute Database respecte ANSI SQL 92 alors dans les spécifcations SQL 92 la sysntaxe est

    La cluse else est bien optionnelle

    @Anapurna
    - je n'ai jamais parlé d'agrégat pour ce qui est du CASE si ce n'est que le test est fait sur un agrégat aliasé STOCK

    De toute façon, dans les deux SQL fournis par MIWAN il y avait des erreurs de syntaxe une virgule manquante dans le premier, un espace manquant dans le second. Peut-être est-ce une erreur de transcription dans le second, mais pour ce qui est du premier l'erreur correspond bien à cette lacune
    je viens de regarder le SQL advantage il semble lui aussi dire que le else est optionnel sauf que
    le sql fait quoi dans le cas d'une réponse fausse si tu n'a pas le else ?
    il met la valeur par défaut sauf que dans le cas d'une inégalité on a pas mis de valeur a tester
    de plus si les résultat ne sont pas de même type je vois pas comment le sql s'en sort
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  17. #17
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    À mon avis, s'il n'y a pas de ELSE c'est NULL qui est renvoyé (vérifié avec Firebird, SQLite)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  18. #18
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    anapurna et sergioMaster
    j'ai pris votre conseil concernant le :
    - CASE WHEN ....THEN......ELSE ..... END
    - SUM(COALESCE(.......
    Pour le SQLITE c'est Ma Prochaine marche et je suis sure que je vous trouve a mes cotes ;
    Thank's

  19. #19
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    À mon avis, s'il n'y a pas de ELSE c'est NULL qui est renvoyé (vérifié avec Firebird, SQLite)
    Effectivement, je ne pensais pas que cela fonctionnait.
    Cela dit, je préfère tout de même la version avec le ELSE

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

Discussions similaires

  1. Requête SQL CASE WHEN THEN ESLE
    Par jessyd dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/05/2018, 17h22
  2. SQL Case When
    Par mechatikhaled dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/01/2009, 16h57
  3. Sql CASE/WHEN avec HyperFile
    Par iniaina dans le forum HyperFileSQL
    Réponses: 5
    Dernier message: 21/11/2008, 10h37
  4. Transact SQL : case when
    Par dianouch dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/07/2006, 12h12
  5. Equivalent "Select Case when then else end" sur Paradoxe
    Par Seuh.m dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2006, 08h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo