Ошибка преобразования при добавлении процента к концу значения - PullRequest
0 голосов
/ 10 апреля 2019
,CASE WHEN 
   sq.Total_Sales > 0 THEN 
   CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
   ELSE 0 
   END AS Conversion_Rate

Пожалуйста, кто-нибудь может помочь с тем, почему я не могу добавить% в конце?Я получаю сообщение «Ошибка при преобразовании значения varchar« 25% »в тип данных int».

Пример данных:

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Похоже, что SQL Server не одобряет вашу попытку потенциально использовать integer литерал 0 в конкатенации строк.Будет ли это или могло бы действительно произойти - это отдельная история.Это не имеет значения, поскольку SQL Server потребует от вас использовать строки для объединения строк - даже если теоретический путь к объединению невозможен.

Попробуйте это:

,CASE WHEN 
   sq.Total_Sales > 0 THEN 
   CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
   ELSE '0' 
   END AS Conversion_Rate
0 голосов
/ 10 апреля 2019

То есть столбец, возвращаемый из запроса, может быть только одного типа, верно?Когда вы смотрите на ваш запрос, механизм db видит два типа в операторе CASE:

  • CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%' производит VARCHAR(11)
  • 0 в ELSEчасть, это INT

Механизм базы данных пытается объединить их обоих в INT, и так как «5%» не может быть преобразовано в INT, вы получаете ошибку.Вам нужно изменить ELSE 0 на что-то, производящее varchar, например ELSE '0%' или даже ELSE ''.

...