Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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";
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";
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)
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
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.
Rectification: Le calcul de date est juste. Je n'ai pas regardé le bon champs
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
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],
Merci beaucoup. J'étais arrivé à la même conclusion et ça fonctionne maintenant.