Подход 1 : Использование CASE WHEN
Вы можете использовать CASE WHEN
, как показано ниже, чтобы получить желаемый результат.
SELECT
(CASE
WHEN [Months]= 'M01' then 'January'
WHEN [Months]= 'M02' then 'February'
--PUT Remaning conditions
END) [Months],
[Count]
FROM
(
SELECT [Months],[Count]
FROM [TableName]
UnPivot(
[Count] for Months in ([M01]
,[M02]
,[M03]
,[M04]
,[M05]
,[M06]
,[M07]
,[M08]
,[M09]
,[M10]
,[M11]
,[M12])
) as unpiv
)T
Подход 2: INNER JOIN
к таблице сопоставления
У вас может быть таблица сопоставления, в которой вы сопоставляете свои коды с месяцами и ставите INNER JOIN
как
SELECT
MP.MonthName,
T.[Count]
FROM
(
SELECT [Months],[Count]
FROM [TableName]
UnPivot(
[Count] for Months in ([M01]
,[M02]
,[M03]
,[M04]
,[M05]
,[M06]
,[M07]
,[M08]
,[M09]
,[M10]
,[M11]
,[M12])
) as unpiv
)t
INNER JOIN [YourMappingTable] MP ON MP.Code=T.Months
Подход3 : строковые функции.
Другим подходом может быть использование RIGHT
с PATINDEX
для получения номера и, наконец, преобразование числа в название месяца.
SELECT
DateName( month , DateAdd( month , CAST(RIGHT(T.[Months],PATINDEX('%[0-9]%',T.[Months])) AS INT) , 0 ) - 1 ) as Months,
[Count]
FROM
(
SELECT [Months],[Count]
FROM [TableName]
UnPivot(
[Count] for Months in ([M01]
,[M02]
,[M03]
,[M04]
,[M05]
,[M06]
,[M07]
,[M08]
,[M09]
,[M10]
,[M11]
,[M12])
) as unpiv
)t
Примечание: Если формат фиксированный, вы также можете попробовать выполнить следующее, не используя PATINDEX
DateName( month , DateAdd( month , CAST(RIGHT(T.[Months],2) AS INT) , 0 ) - 1 ) as Months,