Синтаксическая ошибка при использовании преобразования внутри поворота
Мне нужно преобразовать мои значения в Varchar. У меня есть такой код:
SELECT Value AS FieldName, [42] AS [KeyID_42],[600] AS [KeyID_600]
FROM
(
SELECT TransID, Value, FieldName
FROM
(
SELECT TransID, [ErisaPlanEndsMM], [ErisaPlanEndsDD],
[MLRAvgLivesNumber], [MLRAvgLivesRptYear]
FROM tblSQLAdminInventory
) p
UNPIVOT
(FieldName FOR Value IN
(Convert(VarChar(250), [ErisaPlanEndsMM]) AS [ErisaPlanEndsMM],
Convert(VarChar(250), [ErisaPlanEndsDD]) AS [ErisaPlanEndsDD],
Convert(VarChar(250), [MLRAvgLivesNumber]) AS [MLRAvgLivesNumber],
Convert(VarChar(250), [MLRAvgLivesRptYear]) AS [MLRAvgLivesRptYear])
)AS unpvt
) AS SourceTable
PIVOT
(
MAX(FieldName)
FOR TransID IN ([42],[600])
) AS PivotTable
Я получаю ошибку:
Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'Convert'.
Все, что я нашел в интернете, - это случаи, когда CAST
использовался, потому что пользователю нужно было преобразовать в Int. В моем случае мне нужно все, Варчар. Может ли кто-нибудь подсказать мне, как это сделать?
1 ответ:
Проблема в том, что вы пытаетесь преобразовать внутри вашего
unpivot
, это неверный синтаксис. Данные должны быть преобразованы до попытки unpivot.Вы можете исправить это, поместив преобразование в свой подзапрос:
SELECT TransID, Value, FieldName FROM ( SELECT TransID, Convert(VarChar(250), [ErisaPlanEndsMM]) AS [ErisaPlanEndsMM], Convert(VarChar(250), [ErisaPlanEndsDD]) AS [ErisaPlanEndsDD], Convert(VarChar(250), [MLRAvgLivesNumber]) AS [MLRAvgLivesNumber], Convert(VarChar(250), [MLRAvgLivesRptYear]) AS [MLRAvgLivesRptYear] FROM tblSQLAdminInventory ) p UNPIVOT ( FieldName FOR Value IN ([ErisaPlanEndsMM], [ErisaPlanEndsDD], [MLRAvgLivesNumber], [MLRAvgLivesRptYear]) )AS unpvt