Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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

18 Replies
lcloatre
Partner - Creator III
Partner - Creator III

Quand tu commentes, il faut le faire sur les 2 lignes.

Je ne  retrouve pas as [Durée de traitement],

Peux-tu vérifier ?

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";

Not applicable
Author

La ligne était bien commenté, c'est le copié collé qui l'a passé sur deux et fait sauter la ligne durée

Voici le script exact qui lève l'erreur ErrorMsg: Syntaxe incorrecte vers ','.

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)))

  as [Durée de traitement],

     "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";

lcloatre
Partner - Creator III
Partner - Creator III

Et si tu mets juste cette formule

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

au lieu de

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

  as [Durée de traitement],

On va procéder par élimination ;o)

Not applicable
Author

Alors le script s’exécute, mais ça me donne systématiquement 0 pour ce champ. Je pense que mes date ne sont pas aux format qui va bien pour SQL

lcloatre
Partner - Creator III
Partner - Creator III

Fais le en 2 fois.

Dans un premier temps, tu charges ta table.

Puis tu ajoutes les champs en t'assurant que les champs DATE sont bien des champs DATE.

Not applicable
Author

Rectification: Le calcul de date est juste. Je n'ai pas regardé le bon champs

Not applicable
Author

  CASE

    WHEN ETATPEC = 'Refusee'

   THEN DATEDIFF(day, DATECREATION, DATEMISEENINSTANCE)

    End as [Durée de traitement],

Ca ça fonctionne aussi.

C'est vraiment le passage au if qui pose pb

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],

Not applicable
Author

Merci beaucoup. J'étais arrivé à la même conclusion et ça fonctionne maintenant.