none
CASE WHEN ? RRS feed

  • Discussion générale

  • Bonjour,

    Le but serait d’afficher tous les contrats qui auraient été mal encodés : ceux dont l’ID est = à …. et qui en même temps n’ont pas une durée exacte d’ 1, 2 ou 3 ans.

    Je ne vois pas très bien comment coder cela : avec des « case when » ou « if else » ou autre chose ? Il ya bcp de conditions et de sous-conditions …

    Qq’un aurait-il une piste ?

    D’avance merci !

    Si ID est = à 1, 2, 3, 4, 5 ou 6 et que la différence en jours entre valid_from et valid_to n’est pas 364 jours (1 an) (and not((DATEDIFF(day, valid_from, valid_to) in (364))))

    Ou si ID est = à 1, 2, 3, 4, 5 ou 6 et que la différence en jours entre valid_from et valid_to n’est pas 365 jours si valid_from ou valid_date est dans une année bissextile (and not((DATEDIFF(day, valid_from, valid_to) in (365) when valid_from like '%2000%' or valid_to like '%2000%' … idem pour 2004, 2008, 2012 et 2016)

    OU

    Si ID est = à 1, 2, 3, 4, 5 ou 6 et que la différence en jours entre valid_from et valid_to n’est pas 729 jours (2 ans)

    Ou si ID est = à 1, 2, 3, 4, 5 ou 6 et que la différence en jours entre valid_from et valid_to n’est pas 730 jours si valid_from ou valid_date est dans une année bissextile

    OU

    Si ID est = à 1, 2, 3, 4, 5 ou 6 et que la différence en jours entre valid_from et valid_to n’est pas 1094 jours (3 ans)

    Ou si ID est = à 1, 2, 3, 4, 5 ou 6 et que la différence en jours entre valid_from et valid_to n’est pas 1095 jours si valid_from ou valid_date est dans une année bissextile

    ALORS

    select DATEDIFF(day, valid_from, valid_to)  as duration , *  from table

    vendredi 3 décembre 2010 13:10

Toutes les réponses

  •  
    Le 03/12/2010 14:10, Fredarno a écrit :
    > Bonjour,
     
    Bonjour,
     
    > Le but serait d’afficher tous les contrats qui auraient été mal encodés :
    > ceux dont l’ID est = à …. et qui en même temps n’ont pas une durée exacte
    > d’ 1, 2 ou 3 ans.
     
    Une question qui me vient à la lecture :
    Si la durée varie selon la présence d'année bissextile dans
    l'intervalle, n'est pas qu'il faut tout simplement comparer le jour et
    le mois des dates de début et fin ?? (peut-être en ayant enlevé un jour
    à la date de fin d'ailleurs)
    Ou quelque chose m'a-t-il échappé ?
     --
    Fred
    foleide@free.fr
     
    vendredi 3 décembre 2010 13:27
  • Bonjour Fredarno,

    Est ce que vous pouvez essayer cette solution SVP :

    --------------------------------------------------------------------
    -----------------------------TABLES---------------------------------
    --------------------------------------------------------------------
    declare @TAB table (ID int,valid_from datetime, valid_to datetime)
    insert @TAB
    select 1,'01/01/2008','31/12/2008' UNION ALL
    select 2,'24/02/2008','23/02/2009' UNION ALL
    select 3,'01/01/2009','01/01/2010' UNION ALL
    select 4,'28/02/2007','27/02/2010' UNION ALL
    select 5,'29/02/2008','28/02/2009' UNION ALL
    select 6,'02/02/2008','02/02/2009' UNION ALL
    select 7,'01/01/2008','31/12/2009'
    --------------------------------------------------------------------
    -----------------------------REQUETTE---------------------------------
    --------------------------------------------------------------------
    select DATEDIFF(day, valid_from, valid_to) as duration , * from @TAB
    where (ID=1 or ID=2 or ID=3 or ID=4 or ID=5 or ID=6)
    and NOT (DATEDIFF(day,valid_from,valid_to)=364 and year(valid_from)%4<>0 and year(valid_to)%4<>0 )
    and NOT (DATEDIFF(day,valid_from,valid_to)=365 and (year(valid_from)%4=0 or year(valid_to)%4=0 ))
    and NOT (DATEDIFF(day,valid_from,valid_to)=729 and year(valid_from)%4<>0 and year(valid_to)%4<>0 )
    and NOT (DATEDIFF(day,valid_from,valid_to)=730 and (year(valid_from)%4=0 or year(valid_to)%4=0 ))
    and NOT (DATEDIFF(day,valid_from,valid_to)=1094 and year(valid_from)%4<>0 and year(valid_to)%4<>0 )
    and NOT (DATEDIFF(day,valid_from,valid_to)=1095 and (year(valid_from)%4=0 or year(valid_to)%4=0 ))
    --------------------------------------------------------------------
    -----------------------------RESULTATS---------------------------------
    --------------------------------------------------------------------
    --365 3 2009-01-01 2010-01-01
    --1095 4 2007-02-28 2010-02-27 
    --366 6 2008-02-022009-02-02
    

     

     


    Best regards
    vendredi 3 décembre 2010 15:46
  • Bonjour,

     

    Fredarno, si cette question est toujours d’actualité, je vous remercie d’apporter les informations supplémentaires demandées par Foleide._ ou de confirmer si la solution proposée par M. Gharbi fonctionne.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    lundi 13 décembre 2010 10:06