Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Script sql if ou cas et différence de date

Bonjour

J'aimerai rajouter un champ via mon script qui est constitué par une différence de date. Les deux dates en question sont fonction d'un autre champ: "ETAT". Voici mon script à l'heure actuelle:

SQL SELECT

    DATECREATION,

    DATEANNULATION,

    DATEMISEAJOUR,

    DATEMISEENINSTANCE,

    DATEREFUS,

    DATEVALIDATION,

    CLIENT as Client,

    CLIENTID as [Id Client],

    ETATPEC as [Etat de PEC],

    Case

    When ETATPEC = "Refusee"

    Then DATEDIFF(day, DATEREFUS, DATECREATION) as [Durée de traitement]

    End

    "MODE RECEPTION" as [Mode de réception],

    MOTIFMISEENINSTANCE as [Motif de mise en instance],

    MOTIFREFUS as [Motif de refus],

    MOTIFREFUSID as [Id Motif de refus],

    SPHERE as Sphère,

      SOUSGROUPE as [Sous groupe],

    SOUSGROUPEID as [Id Sous groupe],

    "TYPE PEC" as [Type de PEC],

    TYPEDEMANDE as [Type de demande],

    NBRE as Volume

FROM "ma table";

Ce script me renvoie ErrorMsg: Syntaxe incorrecte vers le mot clé 'as'.

Quelle est la bonne manière de procéder ? Un if ? Un case ? Ne faut-il pas que j'emploie 'as' ?

Cordialement

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

On se trouve dans la requête SQL, tu ne peux donc utiliser que des fonctions SQL, donc pas de if.

Il faut faire comme ceci :

Case  ETATPEC

    When  'Refusee'  Then

         Case

               When  DATEMISEENINSTANCE IS NULL

                     Then   DATEDIFF(day, DATEREFUS, DATECREATION)

                Else  DATEDIFF(day, DATEMISEENINSTANCE, DATECREATION)

         End

End as [Durée de traitement],

View solution in original post

18 Replies
lcloatre
Partner - Creator III
Partner - Creator III

Bonjour Bertrand,

Ton as doit être mis après le end.

Il manque aussi la virgule.

lcloatre
Partner - Creator III
Partner - Creator III

De plus, comme tu n'as qu'un cas, tu peux utiliser le IF.

Not applicable
Author

Merci pour ta réponse.

En fait c'est un peu plus compliqué sur ça.

Case

    When ETATPEC = 'Refusee'

    Then

         if DATEMISEENINSTANCE IS NULL

              SELECT DATEDIFF(day, DATEREFUS, DATECREATION)

         else

              SELECT DATEDIFF(day, DATEMISEENINSTANCE, DATECREATION)

End as [Durée de traitement],

Voici un bout de mon script mais j'ai encore une erreur ...

lcloatre
Partner - Creator III
Partner - Creator III

Ta syntaxe n'est pas bonne pour le IF.

Essaie avec celle-ci :

if(DATEMISEENINSTANCE IS NULL,DATEDIFF(day, DATEREFUS, DATECREATION),DATEDIFF(day, DATEMISEENINSTANCE, DATECREATION))

Not applicable
Author

J'avais déjà essayé. Ça me renvoie:  ErrorMsg: Syntaxe incorrecte vers ','.

ETATPEC as [Etat de PEC],

    Case

    When ETATPEC = 'Refusee'

    Then

        if(DATEMISEENINSTANCE IS NULL,DATEDIFF(day, DATEREFUS, DATECREATION),DATEDIFF(day, DATEMISEENINSTANCE, DATECREATION))

End as [Durée de traitement],

lcloatre
Partner - Creator III
Partner - Creator III

Avec des if imbriqués, ça doit fonctionner :

If(ETATPEC = 'Refusee', if(DATEMISEENINSTANCE IS NULL,DATEDIFF(day, DATEREFUS, DATECREATION),DATEDIFF(day, DATEMISEENINSTANCE, DATECREATION)))

as [Durée de traitement],

Not applicable
Author

Même erreur malheureusement

lcloatre
Partner - Creator III
Partner - Creator III

Peux-tu mettre l'intégralité de ton script ?

Not applicable
Author

SET ThousandSep=' ';

SET DecimalSep=',';

SET MoneyThousandSep=' ';

SET MoneyDecimalSep=',';

SET MoneyFormat='# ##0,00 €;-# ##0,00 €';

SET TimeFormat='hh:mm:ss';

SET DateFormat='DDMMYYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET FirstWeekDay=0;

SET BrokenWeeks=0;

SET ReferenceDay=4;

SET FirstMonthOfYear=1;

SET CollationLocale='fr-FR';

SET MonthNames='janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.';

SET LongMonthNames='janvier;février;mars;avril;mai;juin;juillet;août;septembre;octobre;novembre;décembre';

SET DayNames='lun.;mar.;mer.;jeu.;ven.;sam.;dim.';

SET LongDayNames='lundi;mardi;mercredi;jeudi;vendredi;samedi;dimanche';

LOAD

  *,

  Date(Date#(DATECREATION, 'YYYY-MM-DD'), 'DD/MM/YYYY') as [Date de création],

  Date(Date#(DATEANNULATION, 'YYYY-MM-DD'), 'DD/MM/YYYY') as [Date d'annulation],

  Date(Date#(DATEMISEAJOUR, 'YYYY-MM-DD'), 'DD/MM/YYYY') as [Date de mise à jour],

  Date(Date#(DATEMISEENINSTANCE, 'YYYY-MM-DD'), 'DD/MM/YYYY') as [Date de mise en instance],

  Date(Date#(DATEREFUS, 'YYYY-MM-DD'), 'DD/MM/YYYY') as [Date de refus],

  Date(Date#(DATEVALIDATION, 'YYYY-MM-DD'), 'DD/MM/YYYY') as [Date de validation];

SQL SELECT

    DATECREATION,

    DATEANNULATION,

    DATEMISEAJOUR,

    DATEMISEENINSTANCE,

    DATEREFUS,

    DATEVALIDATION,

    CLIENT as Client,

    CLIENTID as [Id Client],

    ETATPEC as [Etat de PEC],

// If(ETATPEC = 'Refusee', if(DATEMISEENINSTANCE IS NULL,DATEDIFF(day, DATEREFUS, DATECREATION),DATEDIFF(day, DATEMISEENINSTANCE, DATECREATION)))

     "MODE RECEPTION" as [Mode de réception],

     MOTIFMISEENINSTANCE as [Motif de mise en instance],

     MOTIFREFUS as [Motif de refus],

     MOTIFREFUSID as [Id Motif de refus],

     SPHERE as Sphère,

     SOUSGROUPE as [Sous groupe],

    SOUSGROUPEID as [Id Sous groupe],

    "TYPE PEC" as [Type de PEC],

    TYPEDEMANDE as [Type de demande],

    NBRE as Volume

FROM "TP3G-AUTO".dbo."GTO-Sonde-PEC-V6";

DROP Fields DATECREATION, DATEANNULATION, DATEMISEAJOUR, DATEMISEENINSTANCE, DATEREFUS, DATEVALIDATION;

// Calendrier de création

TempCreation: 

Load 

  min([Date de création]) as minDateCreation, 

  max([Date de création]) as maxDateCreation 

Resident [GTO-Sonde-PEC-V6]; 

 

Let varMinDateCreation = Num(Peek('minDateCreation', 0, 'TempCreation')); 

Let varMaxDateCreation = Num(Peek('maxDateCreation', 0, 'TempCreation')); 

DROP Table TempCreation; 

 

TempCalendarCreation: 

LOAD 

  $(varMinDateCreation) + Iterno()-1 As Num, 

  Date($(varMinDateCreation) + IterNo() - 1) as TempDateCreation 

AutoGenerate 1

While $(varMinDateCreation) + IterNo() -1 <= $(varMaxDateCreation); 

[Calendrier de création]: 

Load 

  TempDateCreation AS [Date de création],

  Ceil (Month(TempDateCreation)/3) as [Trimestre de création],

  Month(TempDateCreation) as [Mois de création],

  // Libellés

  WeekDay(TempDateCreation)&' '&date(TempDateCreation,'DD-MMM-YYYY') as [Libellé date de création],

  WeekYear(TempDateCreation)&' semaine '&Week(TempDateCreation) as [Libellé semaine de création ISO],   //ISO

// Year(TempDateCreation)&' semaine '&Week(TempDateCreation) as [Libellé semaine de création Américain], //Américain

  MonthName(TempDateCreation) as [Libellé mois de création],

  QuarterName(TempDateCreation) as [Libellé trimestre de création],

  YearName(TempDateCreation) as [Libellé année de création],

  // Valeur numérique continue par période

  AutoNumber(WeekStart(TempDateCreation), 'SemaineCréation') as [Semaine num de création ISO], //ISO

// AutoNumber(Year(TempDateCreation)*100 + Week(TempDateCreation), 'SemaineCréation') as [Semaine num de création Américain], //Américain

  AutoNumber(MonthStart(TempDateCreation), 'MoisCréation') as [Mois num de création],

  AutoNumber(QuarterStart(TempDateCreation), 'TrimestreCréation') as [Trimestre num de création],

  Year(TempDateCreation) as [Année num de création] 

Resident TempCalendarCreation 

Order By TempDateCreation ASC; 

Drop Table TempCalendarCreation;

Rename Table "GTO-Sonde-PEC-V6" to "PEC";

Mais celui ci s’exécute correctement quand je commente la partie conditionnelle comme ci-dessus.Je pense donc que ça vient nécessairement de cette partie.