Преобразование SSIS ETL Unpivot в T-SQL Unpivot

Я пытаюсь преобразовать некоторый SSIS ETL в код sql Server. Старый ETl был написан для 2005 года, а новый код T-SQL пишется для 2012 года. У меня есть следующие данные, преобразовываемые в SSIS ETL:

Исходная таблица: AssetName, MoodyRating, SPRating, FitchRating.

Исходные данные:

FirstAsset, 1 , 2 , 3
SecondAsset, 4, 5, 6

Это не сводится к следующему:

Целевая таблица: AssetName, RatingSouce, RatingValue

Целевые данные:

FirstAsset, Moody, 1
FirstAsset, SP, 2
FirstAsset, Fitch, 3
SecondAsset, Moody, 4
SecondAsset, SP, 5
SecondAsset, Fitch, 6

Я думаю, что могу сделать это в SQL с помощью команды UNPIVOT, но я не могу найти пример, который будет вводить RatingSource как часть процесса unpivot. Любая помощь будет оценена.


person Roland Schaer    schedule 26.02.2013    source источник


Ответы (1)


Вы можете использовать функцию UNPIVOT, а затем просто заменить rating в именах столбцов:

select AssetName,
  replace(RatingSouce, 'Rating', '') RatingSouce,
  RatingValue
from yourtable
unpivot
(
  RatingValue
  for RatingSouce in ([MoodyRating], [SPRating], [FitchRating])
) unpiv

См. SQL Fiddle с демонстрацией

person Taryn    schedule 26.02.2013
comment
Спасибо за пример. Это было именно то, что я искал. В моем фактическом случае мне понадобился оператор case вместо замены, чтобы лучше представить те данные, которые я преобразовывал, но это было все. - person Roland Schaer; 26.02.2013
comment
@JookyDFW да, вы можете использовать case для этого, я просто использовал replace, чтобы показать, как это можно сделать. :) - person Taryn; 26.02.2013