18 Replies Latest reply: Apr 13, 2017 6:05 PM by Bertrand Lantuéjoul RSS

    Script sql if ou cas et différence de date

    Bertrand Lantuéjoul

      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

        • Re: Script sql if ou cas et différence de date
          LAURENT CLOATRE

          Bonjour Bertrand,

           

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

           

          Il manque aussi la virgule.

          • Re: Script sql if ou cas et différence de date
            LAURENT CLOATRE

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

              • Re: Script sql if ou cas et différence de date
                Bertrand Lantuéjoul

                Même erreur malheureusement

                  • Re: Script sql if ou cas et différence de date
                    LAURENT CLOATRE

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

                      • Re: Script sql if ou cas et différence de date
                        Bertrand Lantuéjoul

                        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.

                          • Re: Script sql if ou cas et différence de date
                            LAURENT CLOATRE

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

                              • Re: Script sql if ou cas et différence de date
                                Bertrand Lantuéjoul

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