2016-03-01 2 views
0

J'ai créé une instruction case pour fonctionner dans cet ordre.SQL Server - Combinaison d'un champ de date, d'un caractère littéral et d'une valeur DATEADD dans une instruction case

Déterminez s'il s'agit d'une «escalade prioritaire», «prêt pour le ramassage», «en attente de routage», ELSE une plage de dates.

Ce qui précède fonctionne si j'exclus la partie ELSE de l'instruction case. Si aucun des autres cas n'est vrai, alors j'ai besoin de mon autre déclaration pour produire une date d'expédition plus 2 jours ajoutés à la date d'expédition pour donner une plage de dates pour le moment où un colis sera expédié. à savoir 02/15/2016 – 02/17/2016

Select 
    Case 
     When datediff (day, sl.[Shipment Date], sl.[Priority Escalation Date]) < 0 then 'Priority Escalation' 
     When sh.[On Hold] = 'RFP' then 'Ready for Pickup' 
     When sh.[On Hold] = 'WFR' then 'Waiting for Routing' 
     Else sl.[Shipment date] + “ – “ + & DateAdd("d", 2, sl.[Shipment Date]) 
    End as 'Expected Value' 

Voici ce que les données devraient ressembler à

Expected Value 
02/24/2016 - 02/26/2016 
02/24/2016 - 02/26/2016 
02/24/2016 - 02/26/2016 
02/24/2016 - 02/26/2016 
Waiting for Routing 
Waiting for Routing 
Priority Escalation 
Ready for Pickup 
Ready for Pickup 
Priority Escalation 
Priority Escalation 
Priority Escalation 
Ready for Pickup 
+0

Où est vos données d'échantillon? –

Répondre

3

Vous pourriez exécuter en une erreur de conversion. Pour résoudre ce problème, vous devez CONVERT vos dates pour VARCHAR:

SELECT 
    CASE 
     WHEN DATEDIFF (DAY, sl.[Shipment Date], sl.[Priority Escalation Date]) < 0 THEN 'Priority Escalation' 
     WHEN sh.[On Hold] = 'RFP' THEN 'Ready for Pickup' 
     WHEN sh.[On Hold] = 'WFR' THEN 'Waiting for Routing' 
     ELSE CONVERT(VARCHAR(10), sl.[Shipment date], 101) + ' - ' 
       + CONVERT(VARCHAR(10), DATEADD(DAY, 2, sl.[Shipment Date]), 101) 
    END AS 'Expected Value' 
+1

Merci Felix! J'apprécie la réponse rapide et je veux que vous sachiez que cela fonctionne maintenant comme j'en ai besoin. – pcri