2017-09-14 3 views
1

J'utilise la requête ci-dessous, mais obtenir l'erreurdéclaration dans laquelle CASE si tous les résultats sont Varchar

'Conversion failed when converting the varchar value '8-14' to data type int.' 

je présume sa parce que la deuxième ligne est un retour entier et le reste n'est pas, est-ce pas ?

Je ne vais pas calculer ce champ, donc si tous doivent avoir le même type de valeur, avoir la deuxième ligne retour comme varchar serait bien .J'ai essayé d'utiliser 'convertir' mais je ne sais pas Je pense que ma syntaxe est bonne.

,(case when AppointmentCancellationDate = null Then 'NoDate' 
when (datediff(day,BasicStartDate,AppointmentCancellationDate)) < '8' then (datediff(day,BasicStartDate,AppointmentCancellationDate)) 
when (datediff(day,BasicStartDate,AppointmentCancellationDate)) <15 then '8-14' 
when (datediff(day,BasicStartDate,AppointmentCancellationDate)) <22 then '15-21' 
Else '+22' end) as CancWindowGroup 

Répondre

3

Essayez le ci-dessous:

,(case when AppointmentCancellationDate is null Then 'NoDate' 
when (datediff(day,BasicStartDate,AppointmentCancellationDate)) <8 then cast(datediff(day,BasicStartDate,AppointmentCancellationDate) as nvarchar(10)) 
when (datediff(day,BasicStartDate,AppointmentCancellationDate)) <15 then '8-14' 
when (datediff(day,BasicStartDate,AppointmentCancellationDate)) <22 then '15-21' 
Else '+22' end) as CancWindowGroup 
+0

On dirait que ça marche –

+1

et changez de '<'8'' à' <8' –

+1

Et changez '= null' en' est nul' – TriV

1

avec 'NoDate' vous définissez le résultat de l'affaire varchar. la deuxième ligne produit int - donc il y a le conflit de type.