2016-02-29 5 views
2

Мне нужно преобразовать значения в Varchar. У меня этот код:Ошибка синтаксиса при использовании Преобразование внутри PIVOT

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. В моем случае я хочу все, что угодно. Может ли кто-нибудь сказать мне, как это сделать?

Я должен добавить, что это динамический запрос и может содержать несколько десятков полей, в зависимости от таблицы. Мой код выше - это SQL, сгенерированный при работе с одной конкретной таблицей.

+0

Просто мысли, попробуйте использовать тип без размера, как 'Convert (VARCHAR, yourField)' –

+0

Кроме того, что ваш SQL -Верверная версия? –

ответ

1

Проблема в том, что вы пытаетесь преобразовать внутри своего 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