Неверный синтаксис рядом с ключевым словом «как» при выполнении CAST - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь изменить значение данных, которые поступают из SQL.Там, где оно обычно имеет значение 4 в SAL_ClientTypeID, я бы хотел сказать «Private».В настоящее время я получаю сообщение об ошибке:

"Сообщение 156, уровень 15, состояние 1, строка 3 Неверный синтаксис рядом с ключевым словом" as ".

Сначала я пыталсяследующее

   CASE
       WHEN SAL_ClientTypeID = 4 THEN  'Private'
       ELSE SAL_ClientTypeID
   END, 

, но я получил эту ошибку

"Преобразование не удалось преобразовать значение varchar 'Private' в тип данных int."

SELECT SAL_Account_Ref AS 'Account Ref',
       CASE
           WHEN SAL_ClientTypeID = 4 THEN cast (sal_clienttypeID as nvarchar(20)) as 'Private'
           ELSE SAL_ClientTypeID
       END
FROM sales;

Я ожидаю, что значение вывода, где SAL_ClientTypeID = 4 будет 'Private'

Ответы [ 4 ]

3 голосов
/ 20 сентября 2019
SELECT SAL_Account_Ref AS 'Account Ref',
       CASE
           WHEN SAL_ClientTypeID = 4 THEN 'Private'
           ELSE cast (sal_clienttypeID as nvarchar(20))
       END
FROM sales;
1 голос
/ 20 сентября 2019

В вашем запросе есть две проблемы:

Сообщение 156, Уровень 15, Состояние 1, Строка 3 Неверный синтаксис рядом с ключевым словом "as".

Приходитиз-за того, что as сопровождается строковым литералом, за ним должно следовать имя столбца:

SELECT SAL_Account_Ref AS Account_Ref

Вторая ошибка заключается в том, что вы возвращаете два типа данных для case - string, если оно равно 4, int в противном случае, вы должны использовать приведение, чтобы убедиться, что оно всегда одинаково:

SELECT SAL_Account_Ref AS Account_Ref,
       CASE
           WHEN SAL_ClientTypeID = 4 THEN 'Private'
           ELSE cast (sal_clienttypeID as nvarchar(20))
       END
FROM sales;
1 голос
/ 20 сентября 2019

Вы не можете смешивать типы данных в случае ... попробуйте

SELECT SAL_Account_Ref AS 'Account Ref',
       CASE
           WHEN SAL_ClientTypeID = 4 THEN  'Private'
           ELSE CAST(SAL_ClientTypeID, as nvarchar(20))
       END
FROM sales;
0 голосов
/ 20 сентября 2019

В tsql есть приоритет типа данных.Числовые типы имеют более высокий приоритет, чем текстовые типы.Таким образом, когда ваш case включает в себя как текст, такой как 'Private', так и типы чисел, такие как SAL_ClientTypeID, число переопределяется.Когда приходит случай 'Private', tsql пытается преобразовать его в число и выдает ошибку, которую вы видите.

Если вы согласны с тем, чтобы иметь SAL_ClientTypeID в качестве текста, используйте один из других ответов.В противном случае вам придется пересмотреть свою спецификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...